《深入理解Java虚拟机:JVM高级特性与最佳实践》第2版
第5章 调优案例分析与实战
23.高性能硬件上的程序部署策略
通常用集群32位的服务器来代替单个64位的服务器,这样能尽量发挥出硬件的性能:
(1)在64位的程序中,由于指针膨胀以及内存对齐,会造成内存浪费;
(2)在单个64位的服务器宕机的时候,产生的快照很大,不好分析;
(3)大内存的服务器,意味着要对更大的内存区域进行垃圾收集,那么会增大GC的时间,会加长服务器的停顿。
24.通常情况下,用户应用的CPU占用率应该占主要地位。换句话说,系统占用绝大多数的CPU资源的程序不是应用系统本身,是不正常的。
25.对象头包括两部分信息:Mark Word(标记字段)和 Klass Pointer(类型指针)。
26.VisualGC监视曲线重的编译时间(Compile Time)
这里的编译时间是指虚拟机的JIT编译器编译热点代码的耗时。
如果一段Java方法被调用次数达到一定程度,就会被判定为热代码,交给JIT编译器即时编译为本地代码,提高运行速度。(甚至有可能在运行期动态编译比C/C++的编译期静态编译出来的代码更高效。)
27.几个虚拟机配置参数
-Xms=128m JVM初始分配的堆内存
-Xmx=512m JVM最大允许分配的堆内存
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
非堆内存是JVM留给自己用的。方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。
老年代也在非堆内存中。
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=85
value=85意味着第一次CMS垃圾收集会在老年代被占用85%时被触发。
第6章 类文件结构
28.平台无关性的基础
各种不同平台的虚拟机使用统一的程序存储格式——字节码(ByteCode)。
29.Java虚拟机提供的语言无关性
不同语言程序,通过相应的编译器,生成统一格式的字节码。
30.Class文件是一组以8位字节为基础单位的二进制流
字节序,即字节的顺序,也就是大于一个字节类型的数据在内存中的存放顺序。
栈底 (高地址)
---------------
0x06 --低位
0x08 --高位
---------------
栈顶 (低地址)
该字段的值为0x0806。
31.虚拟机拒绝执行超过其版本号的Class 文件
Class文件的头4个字节称为魔数,紧接着的4个字节存储Class文件的版本号。
一个团队分工写不同模块的代码,需要使用相同Java版本。
未完待续...
领取专属 10元无门槛券
私享最新 技术干货