一、-Xmx20M -Xms10M -XX:+PrintGCDetails(jdk1.8)
-Xmx20M -Xms20M -Xlog:gc*(jdk1.9以上)
说明:-XX:+PrintGCDetails 打印GC详细信息
充电:JVM调优总结 -Xms -Xmx -Xmn -Xss
测试代码:
public static void main4(String[] args) {
System.out.println(Runtime.getRuntime().totalMemory()/1024/1024);
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);
String str = "hello";
for (int i=0; i<Integer.MAX_VALUE; i++){
str += str.intern();
}
}
补充说明:
JDK 1.8的时候默认会根据系统的不同而选择不同的Gc回收策略;
JDK 1.9 ~ JDK 1.11:使用的默认Gc操作就是G1。
二、关于C1算法
jdk1.8使用G1回收,加如下参数:
-Xmx20M -Xms20M -XX:+UseG1GC -XX:+PrintGCDetails
JDK 11之后默认就是G1回收器,对于其他的回收算法实际上就可以忽略掉了。 T
omcat调优:JAVA_OPTS="-Xms4096m -Xmx4096m -Xss1024K -XX:+UseG1GC”
路径:tomcat/bin/catalina.sh Spring可以通过系统的环境参数配置实现调优。
问题解疑:
jvm年轻代、老年代什么时候触发垃圾回收?
JVM的年轻代和老年代触发垃圾回收的时机是不同的。在年轻代中,触发垃圾回收的时机通常是当年轻代空间不足以容纳新对象时。当年轻代满了之后,会触发一次Minor GC(即年轻代垃圾回收),回收掉不再被引用的对象,并且将存活的对象晋升到老年代。
而在老年代中,触发垃圾回收的时机则比较复杂,并且与具体的垃圾收集器和相关的参数设置有关。常见的触发老年代垃圾回收的情况包括:
- 满足一定的时间间隔:根据JVM的配置参数,可以设置一个时间间隔,当超过这个时间间隔时,会触发一次Full GC(即老年代垃圾回收)。
- 老年代空间不足:当老年代空间不足以容纳新对象时,会触发一次Full GC。
- 显式调用System.gc():虽然不推荐显式调用System.gc()方法,但是在某些特殊情况下,可以通过调用该方法来建议JVM执行垃圾回收。
需要注意的是,具体的垃圾回收策略和时机可能因不同的JVM实现而有所差异,以上只是一般情况下的触发时机。