• JVM&垃圾回收机制


    1.JVM垃圾回收机制

    1.1 标记算法
    • 引用计数法(进行对象引用计数)——缺点是无法进行解决循环引用
    • 可达性分析——通过一个图,进行从root节点往下进行遍历,没有遍历到的就是无引用对象
    1.2 回收算法
    • 标记-清除法——分为标记,清除两个算法,先一层循环进行标记,再一层循环进行清除
    • 复制算法——进行将内存分为两块,一块进行使用,使用完进行一次回收
    • 标记整理——一轮循环标记,一轮进行交换位置,将不使用的放在末端,最后再全部回收(解决内存碎片化的问题)
    • 分代收集算法——分为新生代,老年代,新生代有Eden, From Survivor, To Survivor区域,老年代有Tenured Gen区域
      • Eden空间和Survivor空间的默认大小比例是8:1,可通过 -XX:SurvivorRatio 命令调整这个比例。
      • 新生代和老年代默认内存大小的比例是1:2,可用过 -XX:NewRatio 命令调整这个比例。
        • 经历一定Minor次数依然存活的对象,该次数可通过 -XX:MaxTenuringThreshold 命令调整,默认:15。
        • Survivor空间中存放不下的对象,会存储在老年代。
        • 新生成的大对象会存储在老年代中,可通过 -XX:+PretenuerSizeThreshold 命令调整。
      • GC的分类
        • Minor GC:从新生代回收内存。
        • Full GC:回收整个Java堆空间的内存,包括新生代和老年代。Full GC比Minor GC慢很多,大概有10倍的差距,但是Full GC执行的频率比较低。
        • Major GC:一般来说和Full GC是等价的,由于名词解读的混乱,当说Major GC时一定要问清楚是指Full GC还是仅指从老年代回收内存。
      • 触发Full GC的条件:
        • 老年代空间不足
        • 永久代空间不足
        • CMS GC时出现promotion failed,concurrent mode failure时
        • Minor GC晋升到老年代的平均大小大于老年代的剩余空间
        • 调用System.gc()
        • 使用RMI来进行RPC或管理的JDK应用,没小时执行一次Full GC
    1.3 垃圾回收器
    • Serial(单线程——复制算法)
    • ParNew(多线程——复制算法)
    • Parallel Scavenge(多核多线程——复制算法)
    • CMS(stop-the-world——标记清除)
    • ParOld(多线程——标记清除)
    • SerialOld(单线程——标记清除)
    • G1(复制+标记清理,分为不等的region,年轻老年代不再物理隔离)
    • jdk 1.8(Parallel Scanvenge(新生代)+Serial Old(老年代))
    • jdk 1.9(G1)
    1.4 查看回收器使用
    • java -XX:+PrintCommandLineFlags -version

    2. jstat使用

    • jstat -class vmid 类加载统计
    • jstat -compiler vmid 编译统计
    • jstat -gc vmid GC查看
    • jstat -gccapacity vmid 查看gc容量
    • jstat -gcnew vmid 查看gc新生内存统计
    • jstat -gcnewcapacity vmid 查看新生代容量
    • jstat -gcold vmid 查看老年代内存统计
    • jstat -gcoldcapacity vmid 查看老年代容量
    • jstat -gcmetacapacity vmid 查看gc的元数据空间统计
    • jstat -gcutil vmid 总结垃圾回收统计
    • jstat -printcompilation vmid 编译方法统计
  • 相关阅读:
    maxContainerCapability 设置不足
    parquet code demo
    Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
    jvm 调优 工具
    hive premanent udf 发布...
    centos6.5 升级python 到 python 2.7.11 安装 pip
    mapreduce 关于小文件导致任务缓慢的问题
    数据可视化开源系统(python开发)
    vs 中 vim vax 快捷键
    ViEmu for VS2013-3.2.1 破解(转)
  • 原文地址:https://www.cnblogs.com/littlepage/p/14274888.html
Copyright © 2020-2023  润新知