笔记——深入JVM——D2

常用JVM配置参数

trace跟踪参数

-verbose:gc 打印GC的简要信息
-XX:+printGC 打印GC的简要信息
-XX:+printGCDetails 打印GC的详细信息
-XX:+printGCTimeStamps 打印GC发生的时间戳
-Xloggc:log/gc.log 制定GC log的位置,以文件输出
-XX:+TraceClassLoading 监控类的加载
-XX:+PrintClassHistogram 按下Ctrl+Break,打印类的信息

堆的分配参数

-Xmx -Xms 指定最大堆,最小堆大小
-Xmn 设置新生代大小
-XX:NewRatio 新生代和老年代的比值,值为老年代/新生代
-XX:SurvivorRatio eden和1个survivor的比值,值为eden/survivor
-XX:HeapDumpOnOutOfMemoryError OOM时导出堆到文件
-XX:+HeapDumpPath 导出OOM的路径
-XX:OnOutOfMemory 在OOM时,执行一个脚本
推荐新生代占堆的3/8,survivor占新生代的1/10
OOM时,记得dump出堆,确保可以排除现场问题

永久区分配参数

-XX:PermSize -XX:MaxPermSize
设置永久区的初始空间和最大空间

栈大小分配

-Xss
通常只有几百K
决定了函数调用的深度
每个线程由独立的栈空间
局部变量,参数分配在栈上面

GC算法和种类

GC算法

  • 引用计数法(无法解决循环问题,淘汰)
  • 可达性分析::通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任何的引用链相连时(从 GC Roots 到这个对象不可达)时,证明此对象不可用
  • 标记-清除:标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
  • 标记-压缩:从根节点开始,对所有可达对象做一次标记后,将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。(适合用于存活对象较多的场合)
  • 复制算法:将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收(不适用于存活对象较多的场合 如老年代)

分代思想

  • 根据对象的存活周期进行分类,短命对象归为新生代,长命对象归为老年代
  • 根据不同代的特点,选取合适的收集算法
    1、少量对象存活,适合复制算法
    2、大量对象存活,适合标记清理或标记压缩
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值