美文网首页
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