加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

什么是“类加载过程”你知道吗?

发布时间:2021-05-28 23:14:37 所属栏目:编程 来源:互联网
导读:计较性能识此外是呆板指令码,简称呆板码。呆板码是二进制的,计较机可以直接辨认,但与人类的说话不同太大,不轻易被人领略和影象。其后,就降生了各类高级说话

计较性能识此外是呆板指令码,简称呆板码。呆板码是二进制的,计较机可以直接辨认,但与人类的说话不同太大,不轻易被人领略和影象。其后,就降生了各类高级说话,人们用高级说话编写措施,然后通过把措施表明或编译成呆板码。

好比python,就是一种表明型说话。Python措施源码不必要编译,可以直接从源代码运行措施。Python表明器将源代码转换为字节码,然后把编译好的字节码转发到Python假造机(PVM)中举办执行。

而C说话就是典范的编译型说话,必要先用编译器编译成呆板码,好比我们凡是用gcc来编译C说话措施:

$ gcc hello.c # 编译 

$ ./a.out # 执行 

hello world! 

那Java是表明型说话照旧编译型说话呢?

「Java是兼具编译型说话与表明型说话的特点的」。措施员写好Java措施后,必要先用javac编译成JVM可以行使的字节码class文件。然后JVM加载class文件,逐条表明执行。在运行进程中,部门热门代码会被即时编译器编译成呆板码。

源代码到字节码

Java说话的源代码是.java为后缀的文件。虽然此刻有许多其余高级说话也架构在JVM上,好比groovy、kotlin等。源代码是给人看的,易于阅读、领略、维护。

源代码颠末编译后获得字节码,字节码是给JVM用的,易于领略和辨认。字节码是以.class为后缀,其名目是JVM的一套筹划,字节码人类比较文档也是始末能看懂的,只是相对Java代码来说要难以领略一些罢了。

Java与Python差异,Python不必要编译字节码文件(虽然,Python也提供了这种操纵),编译是一个自动的进程,一样平常不会在意它的存在。而Java会先编译好字节码文件,这样JVM直接读字节码文件,可以节减加载模块的时刻,进步服从。同时字节码的情势也增进了反向工程的难度,可以掩护源代码(虽然,也可以被反编译)。

认识JVM的小搭档都知道,它有一个“类加载进程”,可以说是老八股文了,常常会被口试官问到。类加载进程着实就是指的JVM从读取一个class文件到筹备好这个类,以及最后烧毁的整个进程。

以是「class文件着实是以“类”为单元的,这跟java文件有一些差异」。假如我们在一个Java文件内里声明多个类,用Javac编译出来会发明有多个class文件。好比我们声明一个One.java文件:

public class One { 

  public class OneInner {} 

  private class OnePrivateInner {} 

  public static class OneStaticInner {} 

  private static class OneprivateStaticInner {} 

 

class Two{} 

用Javac编译后,会呈现6个class文件

➜  $ ls 

'One$OneInner.class'         'One$OneStaticInner.class'          One.class   Two.class 

'One$OnePrivateInner.class'  'One$OneprivateStaticInner.class'   One.java 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读