大家好,这里是淇妙小屋,一个分享技术,分享生活的博主 以下是我的主页,各个主页同步更新优质博客, 后续会发布更多MySQL,Redis,并发,JVM,分布式等面试热点知识,以及Java学习路线,面试重点,职业规划,面经等相关博客 转载请标明出处!
一个实例对象占有的内存可以分为三块——对象头,实例数据,对齐填充
该过程由 ClassLoader完成
就是将二进制流读入内存,并为之创建一个java.lang.Class对象
主要验证字节流是否符合Class文件格式规范,并且能被当前的虚拟机加载处理。例如:主,次版本号是否在当前虚拟机处理的范围之内。常量池中是否有不被支持的常量类型。指向常量的中的索引值是否存在不存在的常量或不符合类型的常量。
这个类是否有父类(Object除外)
这个类是否继承了不允许继承的类(final类)
如果这个类不是抽象类,这个类是否实现了父类和接口中要求实现的所有方法
类中的字段,方法是否与父类产生矛盾
最重要的验证环节,分析数据流和控制,确定语义是合法的,符合逻辑的。主要的针对元数据验证后对方法体的验证。保证类方法在运行时不会有危害出现。
主要是针对符号引用转换为直接引用的时候,是会延伸到第三解析阶段,主要去确定访问类型等涉及到引用的情况,主要是要保证引用一定会被访问到,不会出现类等无法访问的问题。
为类变量分配内存并设置初始值
将.class文件的常量池中的符号引用替换为直接引用
在JVM中,一个类由 加载它的类加载器和 类本身共同确定其在JVM中的唯一性
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。