美文网首页
java GC详解

java GC详解

作者: Aaron_Swartz | 来源:发表于2019-02-18 21:10 被阅读0次

工作中出现的内存溢出异常, 最后只需要调节相应内存大小即可。

  • 永久代内存溢出实例


    永久代内存溢出实例
  • jvm各参数含义


    jvm参数含义
  • 实际配置实例

//其中各个参数都是可以在实际启动中配置
${JAVA_HOME}/bin/java -Dlog4j.logtype=$ERROR_FILENAME -Xms2048m -Xmx2048m -XX:MaxPermSize=512M -XX:+PrintGC-verbose:gc -Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -classpath $CLASSPATH com.baidu.fengchao.sirius.scripts.deletefile.DeleteFileScripts wordcleanup >> ${log_file}  2>&1
  • java 虚拟机实际分配情况

为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent Generation)3个区域。

image.png
  • jdk8中对永久代的升级

jdk8中做法:
把永久代从Java堆中移除了, 并把类的元数据直接保存在本地内存区域(堆外内存),称之为元空间.
好处:
而在JDK8中,类的元数据保存在本地内存中,元空间的最大可分配空间就是系统可用内存空间,可以避免永久代的内存溢出问题,不过需要监控内存的消耗情况,一旦发生内存泄漏,会占用大量的本地内存。
ps:JDK7之前的HotSpot,字符串常量池的字符串被存储在永久代中,因此可能导致一系列的性能问题和内存溢出错误。在JDK8中,字符串常量池中只保存字符串的引用。

参考:
1 JVM启动参数-Xmx的默认值是多少?
2 sun 文档
3 Java GC的那些事(上)
4 Java GC的那些事(下)

相关文章

网友评论

      本文标题:java GC详解

      本文链接:https://www.haomeiwen.com/subject/ollzeqtx.html