读《深入理解Java虚拟机》- 笔记03

《深入理解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版本。


未完待续...

读《深入理解Java虚拟机》- 笔记01

读《深入理解Java虚拟机》- 笔记02

你可能感兴趣的:(读《深入理解Java虚拟机》- 笔记03)