草庐IT

读Java性能权威指南(第2版)笔记12_堆内存中

1. 减少内存使用1.1. 减少堆内存的使用1.1.1. 使用更少的内存意味着堆被填满的频率会降低,需要的GC周期会更少,其效果也可以成倍增强1.1.2. 更少的新生代回收意味着对象的晋升年龄增加的频率降低1.1.3. 对象晋升到老年代的可能性也降低了1.1.4. FullGC周期(或者并发GC周期)的数量将减少1.2. 方法1.2.1. 减小对象大小1.2.2. 使用对象的延迟初始化1.2.3. 使用标准化对象2. 减小对象大小2.1. 可以提高GC的效率2.2. 即使实例变量是null,也会消耗对象类内的空间2.3. 让对象更小2.3.1. 不太可能将堆的大小增加10%2.3.2. 将堆中

读Java性能权威指南(第2版)笔记12_堆内存中

1. 减少内存使用1.1. 减少堆内存的使用1.1.1. 使用更少的内存意味着堆被填满的频率会降低,需要的GC周期会更少,其效果也可以成倍增强1.1.2. 更少的新生代回收意味着对象的晋升年龄增加的频率降低1.1.3. 对象晋升到老年代的可能性也降低了1.1.4. FullGC周期(或者并发GC周期)的数量将减少1.2. 方法1.2.1. 减小对象大小1.2.2. 使用对象的延迟初始化1.2.3. 使用标准化对象2. 减小对象大小2.1. 可以提高GC的效率2.2. 即使实例变量是null,也会消耗对象类内的空间2.3. 让对象更小2.3.1. 不太可能将堆的大小增加10%2.3.2. 将堆中

读Java性能权威指南(第2版)笔记13_堆内存下

1. 对象重用1.1. 原因1.1.1. 许多对象的初始化成本很高,权衡了增加的GC时间之后,还是重用对象的效率更高1.2. 只适用于初始化成本很高且数量较少的一组对象1.2.1. 被重用的对象会在堆中停留很长时间。如果堆中有大量对象,创建新对象的空间就更少了,因此GC操作会更频繁。1.3. 方式1.3.1. 对象池1.3.1.1. 线程池化可以节省创建线程的时间1.3.1.2. 在池中有少量对象并不会对GC效率产生太大影响,但堆中充满池化对象时会大大减慢GC的速度1.3.2. 线程局部变量1.3.2.1. 随机数生成器作为线程局部变量,可以节省使用随机数种子创建生成器所需的时间1.4. 特点

读Java性能权威指南(第2版)笔记13_堆内存下

1. 对象重用1.1. 原因1.1.1. 许多对象的初始化成本很高,权衡了增加的GC时间之后,还是重用对象的效率更高1.2. 只适用于初始化成本很高且数量较少的一组对象1.2.1. 被重用的对象会在堆中停留很长时间。如果堆中有大量对象,创建新对象的空间就更少了,因此GC操作会更频繁。1.3. 方式1.3.1. 对象池1.3.1.1. 线程池化可以节省创建线程的时间1.3.1.2. 在池中有少量对象并不会对GC效率产生太大影响,但堆中充满池化对象时会大大减慢GC的速度1.3.2. 线程局部变量1.3.2.1. 随机数生成器作为线程局部变量,可以节省使用随机数种子创建生成器所需的时间1.4. 特点

读Java性能权威指南(第2版)笔记14_垃圾回收A

1. 垃圾回收器1.1. 对象可以在被需要时创建,不再使用时由JVM自动回收1.2. GC是查找不再使用的对象,然后回收这些对象相关内存的过程1.2.1. 找到不使用的对象、回收其内存、压缩堆内存1.3. 优化垃圾回收器比跟踪指针引起的bug要容易得多(且耗时更少)1.4. VM必须定期搜索堆中不使用的对象1.4.1. 从GC根(GCroot)对象开始搜索,GC根是可以从堆外被访问的对象,主要包括线程栈和系统类1.4.2. 当GC算法找到不使用的对象时,JVM会回收这些对象占用的内存,并将这些内存分配给其他对象2. 垃圾回收器运行多个线程2.1. 一组执行应用程序逻辑,通常被称为mutator

读Java性能权威指南(第2版)笔记14_垃圾回收A

1. 垃圾回收器1.1. 对象可以在被需要时创建,不再使用时由JVM自动回收1.2. GC是查找不再使用的对象,然后回收这些对象相关内存的过程1.2.1. 找到不使用的对象、回收其内存、压缩堆内存1.3. 优化垃圾回收器比跟踪指针引起的bug要容易得多(且耗时更少)1.4. VM必须定期搜索堆中不使用的对象1.4.1. 从GC根(GCroot)对象开始搜索,GC根是可以从堆外被访问的对象,主要包括线程栈和系统类1.4.2. 当GC算法找到不使用的对象时,JVM会回收这些对象占用的内存,并将这些内存分配给其他对象2. 垃圾回收器运行多个线程2.1. 一组执行应用程序逻辑,通常被称为mutator

读Java性能权威指南(第2版)笔记15_垃圾回收B

1. GC触发条件1.1. 当新生代满的时候1.1.1. MinorGC会被触发1.2. 当老年代满的时候1.2.1. FullGC会被触发1.3. 当堆快要填满时1.3.1. 并发GC(如果适用)会被触发2. 强制开启GC2.1. System.gc()方法2.1.1. 总是会触发FullGC(即使JVM运行的是G1GC或者CMS)2.1.2. 并不会让应用程序更高效2.1.2.1. 只是让GC比其他情况更早开启,也只是将性能的影响延迟了2.1.3. 调用这个方法从来都不是好主意2.2. 例外2.2.1. 在做性能监控或基准测试时2.2.1.1. 对于运行少量代码的小型基准测试,为了加快预热

读Java性能权威指南(第2版)笔记15_垃圾回收B

1. GC触发条件1.1. 当新生代满的时候1.1.1. MinorGC会被触发1.2. 当老年代满的时候1.2.1. FullGC会被触发1.3. 当堆快要填满时1.3.1. 并发GC(如果适用)会被触发2. 强制开启GC2.1. System.gc()方法2.1.1. 总是会触发FullGC(即使JVM运行的是G1GC或者CMS)2.1.2. 并不会让应用程序更高效2.1.2.1. 只是让GC比其他情况更早开启,也只是将性能的影响延迟了2.1.3. 调用这个方法从来都不是好主意2.2. 例外2.2.1. 在做性能监控或基准测试时2.2.1.1. 对于运行少量代码的小型基准测试,为了加快预热

读Java性能权威指南(第2版)笔记16_垃圾回收C

1. 调整堆的大小1.1. 随着堆的大小增加,停顿的持续时间也会增加1.2. 停顿发生的频率确实会降低,但是停顿的持续时间会拖慢整体性能1.3. 操作系统进行的交换对JVM是不公开的1.3.1. 操作系统要将数据从磁盘交换到RAM,这是一个代价高昂的操作1.4. 首要规则是设定堆的大小永远不要超过机器的物理内存1.4.1. 如果有多个JVM在运行,那么这适用于所有堆的总和1.5. -XmsN标志1.5.1. 初始值1.6. -XmxN标志1.6.1. 最大值1.7. 默认值1.7.2. 在物理内存小于192MB的机器上,堆的最大值会是物理内存的一半(96MB或更少)1.8. 如果JVM发现堆在

读Java性能权威指南(第2版)笔记16_垃圾回收C

1. 调整堆的大小1.1. 随着堆的大小增加,停顿的持续时间也会增加1.2. 停顿发生的频率确实会降低,但是停顿的持续时间会拖慢整体性能1.3. 操作系统进行的交换对JVM是不公开的1.3.1. 操作系统要将数据从磁盘交换到RAM,这是一个代价高昂的操作1.4. 首要规则是设定堆的大小永远不要超过机器的物理内存1.4.1. 如果有多个JVM在运行,那么这适用于所有堆的总和1.5. -XmsN标志1.5.1. 初始值1.6. -XmxN标志1.6.1. 最大值1.7. 默认值1.7.2. 在物理内存小于192MB的机器上,堆的最大值会是物理内存的一半(96MB或更少)1.8. 如果JVM发现堆在