前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM的GC

JVM的GC

原创
作者头像
CoffeeLand
修改2020-04-20 12:11:05
4020
修改2020-04-20 12:11:05
举报
文章被收录于专栏:CoffeeLandCoffeeLand

Table of Contents

  • GC如何判断对象死活
  • 堆分配策略
  • 垃圾回收算法
  • jvm监控工具
  • jvm调优

GC如何判断对象死活

引用计数法
  • 对象被引用一次, 引用计数器+1, 引用失效时, 引用计数器-1, 当引用计数器为0时,就会通知GC来回收
  • 不能处理循环引用的对象, 所以主流的jvm厂商不会选择这用算法

GC roots可达性分析
  • 从gc roots对象出发, 不可达将被通知GC去回收
  • gc roots对象类型
    • 虚拟机栈中引用的对象
    • 方法区中类静态属性引用的对象
    • 方法区中常量引用的对象
    • 本地方法中JNI引用的对象

堆分配策略

  • 新产生的对象被分配在Eden区
  • 大对象直接进入老年代
  • 长期存活的对象进入老年代
  • 动态对象的年龄分配
    • age>15 (来自<深入理解java虚拟机>)
    • -XX:MaxTenuringThreshold来设置(来自oracle)

垃圾回收算法

标记-清除算法
  • 先标记再清除
  • 容易产生内存碎片

复制算法

将内存分为大小相等两块, 每次只用一块, 当这一块用完了, 就将还存活的对象复制到另一块内存上, 然后把已经使用的左边的内存空间一次性整理

  • 效率高
  • 内存使用率低

分代收集算法

根据代的不同特点选用最适当的收集算法

  • hotspot等主流虚拟机使用的

垃圾收集器

Serial(串行)收集器

  • 单线程的收集器
  • stop the world
  • 适合客户端模式下的虚拟机的收集

ParNew收集器

  • 多线程收集器
  • 适合server端模式下的虚拟机的收集

Parallel scavenge 收集器

  • 是新生代收集器, 使用赋复制算法, 又是并行的收集器
  • 目的是大道一个可控的吞吐量, 增强用户体验

Serial Old收集器

  • 老年代收集器, 单线程收集器

CMS收集器

  • CMS: concurrent Mark Sweep. 使用标记-清楚算法来清楚
  • 重新标记会stop the world
  • 有内存碎片
  • 并发收集, 低停顿

G1 收集器

  • Garbage First
  • 面向server端
  • jdk1.7引入
  • 并行并发
  • 分代收集
  • 空间整合
  • 可预测的停顿

jvm监控工具

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr025.html

代码语言:javascript
复制
jconsole  
jdb    
jhat   
jps     
jstat   
jvisualvm
jarsigner  javac  javafxpackager  javap  java-rmi.cgi  jcmd    jcontrol  jdeps  
jinfo  
jmap  
jmc.ini  
jrunscript  
jstack     
jstatd

jvm调优

共享区域的大小= 年轻代大小 + 老年代 + 持久代.

堆设置java物理内存的1/4

官方推荐新生代栈对的3/8

Xms与Xmx 设置一样值, 能够避免jvm因为频繁的GC导致大起大落

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Table of Contents
  • GC如何判断对象死活
    • 引用计数法
      • GC roots可达性分析
      • 堆分配策略
      • 垃圾回收算法
        • 标记-清除算法
          • 复制算法
            • 分代收集算法
            • 垃圾收集器
              • Serial(串行)收集器
                • ParNew收集器
                  • Parallel scavenge 收集器
                    • Serial Old收集器
                      • CMS收集器
                        • G1 收集器
                        • jvm监控工具
                        • jvm调优
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档