打印日志信息 并且具体解释
在vm options处加入-XX:+PrintGCDetails
package cn.tukk.otherTest;
public class TestGC {
public Object instance=null;
private static final int _1MB=1024*1024;
private byte[] bigSize=new byte[2*_1MB];
public static void main(String[] args) {
testGC();
}
public static void testGC(){
TestGC objA = new TestGC();
TestGC objB= new TestGC();
objA.instance=objB;
objB.instance=objA;
objA=null;
objB=null;
System.gc();
}
}
刚开始的GC日志开头的“[GC(System.gc())]”和”[Full GC(System.gc())]”说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的,
如果是”Full”,说明这次发生了Stop-The-World的停顿(停顿了所有java线程),而System.gc()表示这次垃圾收集是由于执行了System.gc()产生的
后面的”[PSYoungGen]”表示GC发生的区域,YoungGen自然表示是新生代区域,这里的发生区域是和GC收集器相关的,这里是“PSYoungGen”表示是Parallel Scavenge收集器,如果是ParNew收集器,将会是”[ParNew]”,如果是Serial收集器绘制”[DefNew]”意为”Default New Generation”
那自然,后面的”[ParOldGen]”表示的是老年代回收
PSYoungGen total:表示新生代可用空间(Eden区加上一个Survivor区)
from space和to space分别表示两个survivor的空间
ParOldGen自然表示的就是老年代的空间
重新设置jvm参数
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大
-XX:+PrintGCDetails //打印GC详细信息
-Xms100M //堆大小100M
-Xmx200M //堆最大占用内存
-Xmn10M //新生代 大小
-XX:SurvivorRatio=8 //Eden:Survivor1:Survivor2 = 8:1:1
-XX:MaxPermSize30M //永久代内存大小
-XX:MetaspaceSize=30M //元空间 初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize=300M //最大空间,默认是没有限制的。