无论什么算法都跟引用有关,Java里面有下面四种引用由强到弱:java
内存回收的具体实现,用一些线程模型结合上面算法实现了多种垃圾回收器,以下图:算法
存在连线能够搭配使用,目前没有万能的回收器,只能组合使用服务器
初始标记(要停用户线程):标记一下GC Roots能直接关联到的对象
并发标记:进行GC Roots Tracing的过程
从新标记(停用户线程),修正并发标记期间用户线程继续运做而致使标记产生变更的那一部分对象的标记记录
并发清除:基于标记清除算法作的,因此这阶段就是清除,
耗时最长的是能够与用户线程一块儿运行的并发标记和并发清除阶段。多线程
这里的并行、并发的概念:
并行(parallel):多个线程同时工做,可是用户线程任然处于等待状态
并发(Concurrent):用户线程与垃圾收集器线程同时执行。并发
[GC、[Full GC表示停顿类型,[DefNew、[Tenured、[Perm是发生区域,这里的区域名称与使用的垃圾收集器密切相关,方括号里面的3324K->152K(3712K)表示GC以前该内存已使用容量->GC以后该内存使用容量(该内存区域总容量),方括号外面的3324K-152K(11904K)表示GC以前Java堆已使用容量->GC以后Java堆使用容量(Java堆总容量),最后0.0025925secs表示该内存区域GC使用时间。优化
-XX:+<option> 启用选项
-XX:-<option> 不启用选项
-XX:<option>=<number>
-XX:<option>=<string>spa
-XX:+UseSerialGC | Jvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收 |
-XX:+UseParNewGC | 打开此开关后,使用ParNew + Serial Old的收集器进行垃圾回收 |
-XX:+UseConcMarkSweepGC | 使用ParNew + CMS + Serial Old的收集器组合进行内存回收,Serial Old做为CMS出现“Concurrent Mode Failure”失败后的后备收集器使用。 |
-XX:+UseParallelGC | Jvm运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge + Serial Old的收集器组合进行回收 |
-XX:+UseParallelOldGC | 使用Parallel Scavenge + Parallel Old的收集器组合进行回收 |
-XX:SurvivorRatio | 新生代中Eden区域与Survivor区域的容量比值,默认为8,表明Eden:Subrvivor = 8:1 |
-XX:PretenureSizeThreshold | 直接晋升到老年代对象的大小,设置这个参数后,大于这个参数的对象将直接在老年代分配 |
-XX:MaxTenuringThreshold | 晋升到老年代的对象年龄,每次Minor GC以后,年龄就加1,当超过这个参数的值时进入老年代 |
-XX:UseAdaptiveSizePolicy | 动态调整java堆中各个区域的大小以及进入老年代的年龄 |
-XX:+HandlePromotionFailure | 是否容许新生代收集担保,进行一次minor gc后, 另外一块Survivor空间不足时,将直接会在老年代中保留 |
-XX:ParallelGCThreads | 设置并行GC进行内存回收的线程数 |
-XX:GCTimeRatio | GC时间占总时间的比列,默认值为99,即容许1%的GC时间,仅在使用Parallel Scavenge 收集器时有效 |
-XX:MaxGCPauseMillis | 设置GC的最大停顿时间,在Parallel Scavenge 收集器下有效 |
-XX:CMSInitiatingOccupancyFraction | 设置CMS收集器在老年代空间被使用多少后出发垃圾收集,默认值为68%,仅在CMS收集器时有效,-XX:CMSInitiatingOccupancyFraction=70 |
-XX:+UseCMSCompactAtFullCollection | 因为CMS收集器会产生碎片,此参数设置在垃圾收集器后是否须要一次内存碎片整理过程,仅在CMS收集器时有效 |
-XX:+CMSFullGCBeforeCompaction | 设置CMS收集器在进行若干次垃圾收集后再进行一次内存碎片整理过程,一般与UseCMSCompactAtFullCollection参数一块儿使用 |
-XX:+UseFastAccessorMethods | 原始类型优化 |
-XX:+DisableExplicitGC | 是否关闭手动System.gc |
-XX:+CMSParallelRemarkEnabled | 下降标记停顿 |
-XX:LargePageSizeInBytes | 内存页的大小不可设置过大,会影响Perm的大小,-XX:LargePageSizeInBytes=128m |
-XX:+PrintFlagsFinal | 可查看jdk参数的默认值 |