摘要:
1. 性能优化是围绕工具展开的 1.1. 最重要的工具大都是Java开发工具包(JDK)自带的 1.2. 查看应用程序性能时,首先应该考察的就是CPU时间 2. 操作系统工具 2.1. Unix系统 2.1.1. sar(System Accounting Report)及其组成工具 2.1.2. 阅读全文
摘要:
1. 巨型对象 1.1. humongous object 1.2. 大于等于区域一半大小的对象 1.3. 巨型对象被直接分配在老年代,所以它在新生代回收期间不会被释放 1.4. G1区域的大小是2的幂,最小值是1 MB 1.5. 如果堆的最大值和初始值差别很大,就会有过多的G1区域,这种情况下应该 阅读全文
摘要:
1. Survivor空间 1.1. 新生代被划分为两个Survivor空间和一个Eden空间的原因 1.1.1. 刚刚被创建并且还在使用中,所以不能被回收,但它们的寿命并没有长到足以进入老年代 1.1.2. 仍在新生代中的对象有额外的机会被回收,而不是晋升到(并填满)老年代 1.2. 首次新生代回 阅读全文
摘要:
1. G1垃圾回收器 1.1. 垃圾优先(garbage first) 1.2. 在堆内离散的区域上进行操作 1.2.1. 默认大约有2048个 1.2.2. 代的区域不需要是连续的 1.2.3. 可能属于老年代 1.2.3.1. 并发后台线程寻找没有被引用的对象时,一些区域会比其他区域有更多的垃圾 阅读全文
摘要:
1. 回收 1.1. 找到不使用的对象 1.2. 释放它们的内存 1.3. 压缩堆 1.4. 合在一起称为回收 2. Throughput回收器 2.1. 工作细节比较简单 2.1.1. 可以在同一个GC周期内完成回收 2.1.2. 在单次操作过程中回收新生代或老年代 2.2. Minor GC 2 阅读全文
摘要:
1. 元空间(metaspace) 1.1. 当JVM加载类时,它必须记录这些类的某些元数据,这些数据占据的一个单独的堆空间,即元空间 1.2. 元空间里的信息只在编译器和JVM运行时使用,它所保存的数据被称为类元数据(class metadata) 1.2.1. 对于终端用户,元空间是不透明的 1 阅读全文
摘要:
1. 调整堆的大小 1.1. 随着堆的大小增加,停顿的持续时间也会增加 1.2. 停顿发生的频率确实会降低,但是停顿的持续时间会拖慢整体性能 1.3. 操作系统进行的交换对JVM是不公开的 1.3.1. 操作系统要将数据从磁盘交换到RAM,这是一个代价高昂的操作 1.4. 首要规则是设定堆的大小永远 阅读全文
摘要:
1. GC触发条件 1.1. 当新生代满的时候 1.1.1. Minor GC会被触发 1.2. 当老年代满的时候 1.2.1. Full GC会被触发 1.3. 当堆快要填满时 1.3.1. 并发GC(如果适用)会被触发 2. 强制开启GC 2.1. System.gc()方法 2.1.1. 总是 阅读全文
摘要:
1. 垃圾回收器 1.1. 对象可以在被需要时创建,不再使用时由JVM自动回收 1.2. GC是查找不再使用的对象,然后回收这些对象相关内存的过程 1.2.1. 找到不使用的对象、回收其内存、压缩堆内存 1.3. 优化垃圾回收器比跟踪指针引起的bug要容易得多(且耗时更少) 1.4. VM必须定期搜 阅读全文
摘要:
1. 对象重用 1.1. 原因 1.1.1. 许多对象的初始化成本很高,权衡了增加的GC时间之后,还是重用对象的效率更高 1.2. 只适用于初始化成本很高且数量较少的一组对象 1.2.1. 被重用的对象会在堆中停留很长时间。如果堆中有大量对象,创建新对象的空间就更少了,因此GC操作会更频繁。 1.3 阅读全文