少年帮|JVM内幕:Java虚拟机详解( 三 )
- 新生代
- 经常被分为 Eden 和 Survivor
- 老年代
- 永久代
- 新的对象和数组被创建并放入老年代 。
- Minor垃圾回收将发生在新生代 。 依旧存活的对象将从 eden 区移到 survivor 区 。
- Major垃圾回收一般会导致应用进程暂停 , 它将在三个区内移动对象 。 仍然存活的对象将被从新生代移动到老年代 。
- 每次进行老年代回收时也会进行永久代回收 。 它们之中任何一个变满时 , 都会进行回收 。
非堆内存包括:
- 永久代 , 包括:
- 方法区
- 驻留字符串(interned strings)
- 代码缓存(Code Cache):用于编译和存储那些被 JIT 编译器编译成原生代码的方法 。
方法区方法区存储了每个类的信息 , 比如:
- Classloader 引用
- 运行时常量池
- 数值型常量
- 字段引用
- 方法引用
- 属性
- 字段数据
- 字段名
- 类型
- 修饰符
- 属性(Attribute)
- 针对每个字段的信息
- 方法数据
- 方法名
- 返回值类型
- 参数类型(按顺序)
- 修饰符
- 属性
- 每个方法
- 方法代码
- 字节码
- 操作数栈大小
- 局部变量大小
- 局部变量表
- 异常表
- 每个异常处理器
- 开始点
- 结束点
- 异常处理代码的程序计数器(PC)偏移量
- 被捕获的异常类对应的常量池下标
- 每个方法
类文件结构一个编译后的类文件包含下面的结构:
【少年帮|JVM内幕:Java虚拟机详解】
ClassFile {u4magic;u2minor_version;u2major_version;u2constant_pool_count;cp_infocontant_pool[constant_pool_count – 1];u2access_flags;u2this_class;u2super_class;u2interfaces_count;u2interfaces[interfaces_count];u2fields_count;field_infofields[fields_count];u2methods_count;method_infomethods[methods_count];u2attributes_count;attribute_infoattributes[attributes_count];}
magic, minor_version, major_version类文件的版本信息和用于编译这个类的 JDK 版本 。 constant_pool类似于符号表 , 尽管它包含更多数据 。 下面有更多的详细描述 。 access_flags提供这个类的描述符列表 。 this_class提供这个类全名的常量池(constant_pool)索引 , 比如org/jamesdbloom/foo/Bar 。 super_class提供这个类的父类符号引用的常量池索引 。 interfaces指向常量池的索引数组 , 提供那些被实现的接口的符号引用 。 fields提供每个字段完整描述的常量池索引数组 。 methods指向constant_pool的索引数组 , 用于表示每个方法签名的完整描述 。 如果这个方法不是抽象方法也不是 native 方法 , 那么就会显示这个函数的字节码 。 attributes不同值的数组 , 表示这个类的附加信息 , 包括 RetentionPolicy.CLASS 和 RetentionPolicy.RUNTIME 注解 。
- 金戈鐵馬|特朗普力挺铁杆支持者,枪杀两人的少年没错?抗议活动不断发酵
- 少年|央视要搞选秀,热搜沸了!网友提名他当导师,点赞数第一
- 暖夏少年|2020电脑硬盘销量排行榜:七彩虹加入战局,硬是打倒了金士顿
- 少年一梦|2020畅销手机排行,iPhone无人超越,安卓旗舰全线溃败
- 少年帮|进入倒计时,华为突然宣布,供应链将迎来“洗牌”?
- 上线|原创央视也搞成团选秀!《上线吧!华彩少年》有哪些优势?粉丝放心了
- 海报|央视首档少年成团选秀节目《上线吧!华彩少年》开始全球招募
- 少年帮|正式确认?中科院宣布决定,纯国产“龙芯”即将来临
- 光一样的少年|面对后起之秀,苏泊尔不玩价格战,以一抵八多功能破壁机倍受追捧
- 中国新闻网|专家澄清:视觉训练不能治疗青少年真性近视