1.System.gc()
System.gc会显示地触发Full GC,同时对老年代和新生代进行回收。但是System.gc()无法保证对垃圾收集器的调用。
程序执行时并非任何时刻都能停下来开始GC,只有特定的位置才能停顿下来进行GC.能停止的位置成为安全点。
2.几种引用关系——强、软、弱、虚,引用强度逐渐减弱
强引用:最常见的,只要引用关系没有断开,永远不会被回收。
软引用:内存不足即回收。高速缓存就用到的软引用。
弱引用:发现即回收。当系统资源充足不进行GC时,这些资源可保留。WeakHashMap
虚引用:如果一个对象仅有虚引用,那它几乎和没有引用一样。
3.评估GC的性能指标
吞吐量:应用运行时间/应用运行时间+内存回收时间
暂停时间:执行垃圾回收时 工作线程被暂停的时间
内存占用:堆区所占的内存大小
现在标准:在最大吞吐量优先的情况下,降低停顿时间
4. 垃圾回收器
4.1 查看默认垃圾回收器
-XX:+PrintCommandLineFlags
jinfo -flag 相关垃圾回收器参数 进程Id
4.2Serial回收器:串行回收
Serial是最基本、最悠久的垃圾收集器。Serial收集器采用复制算法、串行回收和“Stop the World”机制的方式回收新生代空间。Serial Old采用串行回收、标记压缩算法(防止碎片化)回收老年代。
指定使用Serial -XX:+UseSerialGC
4.3 ParNew 并行回收
ParNew与Serial相比 除了是多线程之外没有其他的区别。
4.4 Parallel 吞吐量优先
Paralled Scavenge收集器的目标是达到一个可控制的吞吐量,自适应调节(根据应用的性能监控自动调节参数)是它和ParNew的一个区别。
4.5 CMS 低延迟-低暂停时间
CMS(Concurrent-Mark-Sweep)是第一款真正意义上的并发收集器,可以让垃圾收集线程和用户线程同时工作。尽可能的缩短垃圾收集时用户线程的停顿时间,采用的是标记清除算法。
整个过程分为4个阶段:
- 初始标记&