JVM 微解2

44 篇文章 6 订阅

JVM Trace跟踪参数

-verbose:gc
    打印GC日志信息
-XX:+PrintGCDetails
    打印GC日志信息
-Xloggc:d:/gc.log 
    GC日志目录
-XX:+PrintHeapAtGC 
    每次一次GC后,都打印堆信息
-XX:+TraceClassLoading
    类加载信息

JVM 内存分配参数详解

-Xmx 
    最大堆
–Xms
    最小堆
-Xmn 
    新生代大小 (eden+2s)
–XX:NewRatio 
    年轻代(eden+2s):老年代
–XX:SurvivorRatio  
    2s:eden 
-Xss
    决定方法调用的深度
    没个线程独有栈空间
    参数,局部变量分配在栈上
    一般几百K就够了,64位jvm默认1M
    对栈深度的影响

JVM 内存参数案例讲解

标记-清除算法
    标记阶段
    标记存活对象
    清除阶段
    统一回收所有未标记的对象
    缺点
    会产生内存碎片
    如果空间内存碎片太多,当程序产生大对象无法在堆中找到连续空间大小存放的时候,会强制发生GC

复制算法
    原理
        内存一分为二,每次只使用其中一块,当一块内存没有连续空间存储对象的时候,会把存活下来的对象复制到另外一块内存中,然后一次性清除之前的哪块空间
    优缺点
        没有内存碎片问题
        代价就是讲内存减少了一半,空间利用率不高
        不适用于存活对象较多的场景,比如老年代
        而实际上我们并不需要按照1:1的比例来划分,因为大部分对象从创建到结束这个生命周期很短
        HotSpot虚拟机默认Eden:Survivor=8:1

这里写图片描述

    标记-整理算法
        原理
            标记存活对象,然后把存活对象向一端移动
            清理掉存活对象这端以外的所有空间
        优缺点
            适合用于存活对象较多的场合,如老年代
            解决了空间碎片和效率问题:
            将所有的存活对象压缩到内存的一端,然后清理边界外所有的空间

这里写图片描述

    分代收集算法
        分代思想
            堆划分为新生代和老年代
            新生代中,能够存活的对象很少,可以使用复制算法
            老年代中,对象存活率高,而且没有额外的空间用来做老年代的担保,可以使用标记清除或者标记整理算法

JVM 内存回收
GC

Serial  新生代串行收集器 新(复制算法),老(标记整理)
ParNew 新生代并行收集器
Parallel Scavenge 新生代并行收集器
    目标:尽可能缩GC时用户线程的停顿时间
    在注重吞吐量或CPU资源敏感的场合,可以优先考虑Parallel Scavenge收集器 + Parallel Old收集器
Serial Old 老年代串行收集器
Parallel Old 老年代并行收集器
CMS 真正意义上的并发收集器(老年代收集器)
    目标:最短的GC停顿时间
G1

分代收集GC组合
这里写图片描述

并发:用户线程和GC线程可以同时执行,如果发生GC,用户线程依然可以执行

并行:用户线程和GC线程可以同时执行,如果发生GC 用户线程会暂停

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值