什么是“类加载过程”你知道吗?
计较性能识此外是呆板指令码,简称呆板码。呆板码是二进制的,计较机可以直接辨认,但与人类的说话不同太大,不轻易被人领略和影象。其后,就降生了各类高级说话,人们用高级说话编写措施,然后通过把措施表明或编译成呆板码。 好比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 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |