1. 标记-复制,比如存活区,实现简单,效率高,不会存在内存碎片,但需要2倍的内存来管理
2. 标记-清除,标记出需要回收的对象,标记完成之后统一清除对象。效率高,容易产生内存碎片。
3. 标记-清理,标记完后续在清理无用对象后让所有存活的对象都向一端移动,并更新引用其对象的指针。因为要移动对象,所以它的效率要比“标记-清理”效率低,但是不会产生内存碎片
-Xms :表示java虚拟机堆区内存初始内存分配的大小
-Xmx: 表示java虚拟机堆区内存可被分配的最大上限
-XX:PermSize:表示非堆区初始内存分配大小,JDK8不再使用
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限,JDK8不再使用
-XX:MaxMetaspaceSize:JDK8使用的元空间,即上面的非堆区
-XX:+printGC
-XX:+PrintGCDetails
-Xmn:设置新生代大小
-NewRatio:设置老年代和新生代的比率
-SurvivorRatio:设置新生代Edenspace和一个Survivor space的比率
-XX:+DisableExplicitGC 可以关闭system.gc
-XX:+UseSerialGC,新生代和老年代使用串行回收器
-XX:+UseParallelGC,新生代和老年代使用并行回收器
-XX:+UseParNewGC: 在新生代使用并行收集器。
-XX:+UseParallelOldGC: 老年代使用并行回收收集器。
--XX:+UseConcMarkSweepGC: 新生代使用并行收集器,老年代使用CMS+串行收集器。
-XX:+UseG1GC 使用G1回收器,这里避免使用-Xmn 选项或-XX:NewRatio等其他相关选项显式设置年轻代大小,因为固定年轻代的大小会覆盖暂停时间目标
XX:+MaxGCPauseMills:设置最大垃圾收集停顿时间
G1分为Young GC和Mixed GC,两种都是Stop TheWorld(STW)的。
GC主要为了减少转向老年代的对象数量和Full GC的执行时间。
具体G1的两种GC可以参考:
http://blog.jobbole.com/109170/