GC 机制
- 题记:没有基础,用来了解,请大家指点~
Q:啥是GC?
A: 垃圾回收器(这是翻译),我觉得是:在程序运行过程中,进行堆内存管理的方法。
JVM 组成
Q: 啥是JVM
A:java 虚拟机,一种计算设备的规范。所谓虚拟:并不是真的计算设备,而是在真实的计算设备上模拟各种计算功能。这种特性完成了java 一次编译到处运行的特点
其组成部分。
- class loader (加载类)
- executor engine(执行引擎)
- runtime data area(运行时数据区)
- Native interface(本地接口)
运行时数据区
五类数据:
- java栈
- 本地方法栈
- 堆
- 方法区
- 程序计数器
GC 作用区:方法区&堆(java 栈也会发生GC吗 ?)
迈出第一步:找到垃圾
- 80%对象为临时对象。垃圾就是不再使用的(使用的次数很少。)
如何清除垃圾
符合常识的垃圾清理
- copying(找一个屋子把贵重物品想放起来,对原始屋子大扫除后,再搬回来。)
- mark-sweep(给贵重的东西做个布套,剩余的大扫除,完事把布套收回来)
- mark-compact(不仅 要收回布套,要让贵重的物品扎堆去唠家常)
- mark-sweep-compact
为什么要分代
- 减少工作量,保证吞吐量
关于某大神对于GC 的一些建议
- set null cann’t help GC
- don’t set gc by code
关于G1
- 一般在线服务对于暂停时间都是相当敏感的。
通过GC 我们可以标记回收堆内存中的垃圾。但是我们没办法控制的回收垃圾的时间。 - G1 为我们提供了一个方案,正如名字 Garbage First ,第一时间回收内存。
为了干这件事,G1在新生代,旧生代的内存分配上不再使用GC 连续内存的方式,而是使用非连续内存。