GC:
GC 工作: 释放不再被引用的对象, 处理堆碎片。
GC 优点: 保持完整性, 把程序员从内存管理中走出来。
GC 缺点: 增加JVM压力, 影响程序性能(把平时做的事情放到一起做), 易维护和性能之间一个平衡。
GC 过程:
垃圾对象检测, 堆空间回收。
垃圾对象检测:
引用计数:对每个实例记录其被应用次数, 如果为0则可回收。缺点: 不能侦测循环引用。优点: 较快(将侦测工作分配到JVM使用过程中)
跟踪:从根对象跟踪, 并标记。缺点: 回收过程中程序会停止, 影响用户使用。 解决方法: 分代分块回收。
对空间回收:
涉及到碎片整理。
压缩收集: 将对象越过空闲区移动到堆的另一端。
拷贝收集: 将堆分成两部分, 将活动对象复制到另外一部分。
按代收集:
为什么? 有很多对象生命周期很短, 有很多对象的生命周期很长。
怎么做: 堆被划分为很多代, 年幼的放在一代, 经常被收集, 年长的放在一代。
学习心得:
1. java相对于c等语言, 相对较高级, 在牺牲性能的基础上编程更加容易, 垃圾回收就是个例子, 因为将所用垃圾操作放在一起会影响性能, 但程序员却不需要编写垃圾回收代码, 降低了对程序员的要求。
2. 有功能弊端的方案不可选(引用计数对象侦测, 虽然性能较好, 但不能检测出循环引用, 所以被抛弃)。
3. 按代回收思想。 根据业务特点(有些对象生命周期短, 有些长)将系统分块化(将堆分成不同代), 对每块进行处理以解决性能问题(每块操作时间较短)。
GC 工作: 释放不再被引用的对象, 处理堆碎片。
GC 优点: 保持完整性, 把程序员从内存管理中走出来。
GC 缺点: 增加JVM压力, 影响程序性能(把平时做的事情放到一起做), 易维护和性能之间一个平衡。
GC 过程:
垃圾对象检测, 堆空间回收。
垃圾对象检测:
引用计数:对每个实例记录其被应用次数, 如果为0则可回收。缺点: 不能侦测循环引用。优点: 较快(将侦测工作分配到JVM使用过程中)
跟踪:从根对象跟踪, 并标记。缺点: 回收过程中程序会停止, 影响用户使用。 解决方法: 分代分块回收。
对空间回收:
涉及到碎片整理。
压缩收集: 将对象越过空闲区移动到堆的另一端。
拷贝收集: 将堆分成两部分, 将活动对象复制到另外一部分。
按代收集:
为什么? 有很多对象生命周期很短, 有很多对象的生命周期很长。
怎么做: 堆被划分为很多代, 年幼的放在一代, 经常被收集, 年长的放在一代。
学习心得:
1. java相对于c等语言, 相对较高级, 在牺牲性能的基础上编程更加容易, 垃圾回收就是个例子, 因为将所用垃圾操作放在一起会影响性能, 但程序员却不需要编写垃圾回收代码, 降低了对程序员的要求。
2. 有功能弊端的方案不可选(引用计数对象侦测, 虽然性能较好, 但不能检测出循环引用, 所以被抛弃)。
3. 按代回收思想。 根据业务特点(有些对象生命周期短, 有些长)将系统分块化(将堆分成不同代), 对每块进行处理以解决性能问题(每块操作时间较短)。