JVM的垃圾回收

GC roots
(暂时这么理解)由堆外指向堆内的引用.

  1. JAVA方法栈帧中的局部变量.
  2. 已经加载类的静态变量
  3. JNI handles
  4. 已启动且未停止的JAVA线程

引用计数法

无法回收循环引用的

可达性分析

从GC roots出发,所有可达的对象加入存活合集,那么没有探测到的对象便是死亡,可以回收的.

在垃圾回收过程,为防止其他线程干扰,会停掉非垃圾回收的所有线程.
Stop the world.通过安全点实现.

垃圾回收的三种方式

  1. 清除
    将死亡对象占据的内存记录在空闲列表中,当需要内存时,从列表查找.
    缺点
    (1) 会造成内存碎片,可能出现总内存足够,但无法分配的极端情况.
    (2) 分配效率低,需要查表.
  2. 压缩
    把存活对象聚集到内存区域的起始位置.
    缺点
    额外的算法开销
  3. 复制
    将内存区域分为两份,用from和to指针维护,当发生垃圾回收时,将from的存活对象
    复制到to里,然后交换from和to的内容.
    缺点
    堆空间利用率低.

JAVA虚拟机的堆划分

堆划分为两个部分,分别是新生代,和老年代.
新生代又包含Eden 和 两个 Survivor区(from和to).
虚拟机采用动态分配策略,会根据Eden和survivor的使用情况,动态改变两者的内存比例.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM垃圾回收是Java虚拟机的一个重要功能,它的知识体系包括以下内容: 1. 垃圾回收算法:垃圾回收算法是指垃圾回收器采用的垃圾回收策略。常见的垃圾回收算法包括标记-清除、复制、标记-压缩和分代等。 2. 垃圾回收器:垃圾回收器是JVM的一个组成部分,它负责执行垃圾回收算法,并回收Java对象的内存空间。常见的垃圾回收器包括Serial、Parallel、CMS、G1等。 3. 对象存活判定:垃圾回收器需要判断哪些Java对象是可以回收的,哪些是必须保留的。存活对象可以通过引用计数、可达性分析等方式判断。 4. 垃圾回收的过程:垃圾回收的过程包括标记、清除、整理等阶段。标记阶段是找到存活对象的过程,清除阶段是回收无用对象的过程,整理阶段是将存活对象移动到一块连续的内存区域中。 5. 垃圾回收的性能优化:垃圾回收的性能优化包括分代、增量、并发、预处理等技术。分代是指将Java对象分为年轻代和老年代,以便针对不同的对象有针对性地进行垃圾回收。 6. 垃圾回收的调优和监控:垃圾回收的调优和监控可以通过调整堆大小、设置垃圾回收器类型、调整垃圾回收的参数等方式实现。 JVM垃圾回收是Java虚拟机的一个重要功能,掌握其知识体系可以帮助程序员更好地理解Java程序的内存模型和垃圾回收机制,从而编写出高效、可靠的Java程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值