关于Jvm类加载机制
|
过jar包的内容那么就能知道,我们写的.java文件全部被编译成了.class文件。 这里发生了很重要的一个步骤—— 编译 :将我们写的程序翻译成能被jvm读懂的文件格式。 值得注意的是,每一个 类 都会被编译成一个.class文件,包括内部类等。也就是说每一个.class文件都只对应我们代码中的一个类。 类的生命周期 类被加载到jvm虚拟机内存开始,到卸载出内存为止,他的生命周期可以分为:加载->验证->准备->解析->初始化->使用->卸载。 下面我们来对此一一说明: 加载
当生成一个jar包以后,我们编写的程序就全部编编译成了jvm能读懂的.class格式。此时就需要加载了,将我们的编译好的.class文件加载到jvm中。此时就会有一个“类加载器”的概念。如下图。 来一个问题,类加载器何时会将一个.class加载带jvm?也就是说什么情况下会加载一个类? 一个jar包运行的时候会指定一个main()方法作为入口方法。首先就会将main()方法所在的类加载到jvm,当代码执行遇到new的时候又继续将该对象加载到jvm。 所以总结来说,就是在 你的代码中需要用到这个类的时候 ,就会将其加载到jvm中。 验证 这个不需要理解的太深,很直白的道理,不能什么阿猫阿狗都能被加载到jvm中,要不就乱套了。所以该阶段就是来校验加载进来的.class文件是否符合指定的规则。 有一个很有趣的就是,每个.class文件都很浪漫,因为每一个.class文件都是以8个十六进制的 0×CAFEBABE,翻译过来就是咖啡宝贝。浪漫吧?在验证阶段的第一步就是检查.class文件是否以咖啡宝贝来开头的。 所以我们的流程图可以更新为 (编辑:阜阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

