| 7.3内存收集器 
    serial收集器:单线程,主要用于client模式ParNew收集器:多线程版的serial,主要用于server模式Parallel Scavenge收集器:线程可控吞吐量(用户代码时间/用户代码时间+垃圾收集时间),自动调节吞吐量,用户新生代内存区Serial Old收集器:老年版本serialParallel Old收集器:老年版本Parallel ScavengeCMS(Concurrent Mark Sweep)收集器:停顿时间短,并发收集G1收集器:分块标记整理,不产生碎片 8.虚拟机指令集架构(执行引擎) 8.1虚拟机字节码执行引擎 运行时栈帧结构 每个方法调用开始到执行完成的过程,对应这一个栈帧在虚拟机栈里面从入栈到出栈的过程。 
    栈帧包含:局部变量表,操作数栈,动态连接,方法返回方法调用 方法调用不等于方法执行,而且确定调用方法的版本。 
    方法调用字节码指令:invokestatic,invokespecial,invokevirtual,invokeinterface静态分派:静态类型,实际类型,编译器重载时通过参数的静态类型来确定方法的版本。(选方法)动态分派:invokevirtual指令把类方法符号引用解析到不同直接引用上,来确定栈顶的实际对象(选对象)单分派:静态多分派,相同指令有多个方法版本。多分派:动态单分派,方法接受者只能确定唯一一个。 基于栈的字节码解释 解释执行: 基于栈指令集与基于寄存器的指令集: 基于本地解释器执行过程 类加载 执行子系统案例 tomcat类加载,OSGI热插拔,字节码生成技术,动态代理,Retrotranslator 9.虚拟机实现机制进化过程 程序编译与代码优化 早期编译(编译期) 
    javac编译器:解析与符号表填充,注解处理,生成字节码java语法糖:语法糖有助于代码开发,但是编译后就会解开糖衣,还原到基础语法的class二进制文件 重载要求方法具备不同的特征签名(不包括返回值),但是class文件中,只要描述不是完全一致的方法就可以共存,如: public String foo(List<String> arg){  final int var = 0;  return ""; } public int foo(List<Integer> arg){  int var = 0;  return 0; } 
 晚期编译(运行期) 解析模式 -Xint 编译模式 -Xcomp 混合模式 Mixed mode 分层编译:解释执行 -> C1(Client Compiler)编译 -> C2编译(Server Compiler) 触发条件:基于采样的热点探测,基于计数器的热点探测 
 10.总结 由于JVM涉及内容较深且广,篇幅有限无法深入分析细节。本文从微观方面分析了作为原材料的CLASS文件的结构,又从宏观方面阐述了JVM是如何消化每一个进入的CLASS。JVM自定义了一套逻辑上的指令集,这也呼应了之前我们介绍的计算机如何运行一文,现代计算机性能有了长足的发展,但是本质上还是完备的诺依曼体系架构。随着量子计算的突飞猛进,相信未来的计算模型也会有革命性的突破。 【编辑推荐】 【责任编辑:武晓燕 TEL:(010)68476606】如何合理的规划JVM性能调优深入进阶:图解分析JVM内存堆布局Java虚拟机如何加载类的?核心基础:理解何为JVM?掌握Java虚拟机构成精髓JVM 理解其实并不难!
 点赞 0
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |