博客
关于我
JVM初探(二):垃圾回收机制
阅读量:402 次
发布时间:2019-03-05

本文共 1542 字,大约阅读时间需要 5 分钟。

JVM垃圾回收机制详解

一、概述

自动的垃圾回收机制是Java语言的一大特点,它使开发者无需手动管理内存,从而避免了内存泄漏和内存碎片等问题。内存管理主要涉及内存的分配和回收,而Java虚拟机(JVM)通过分代算法实现内存的高效回收。

1.1 内存区域划分

Java堆(Heap)是垃圾回收的主要场所,主要存放对象实例。堆中分为新生代(Young Generation)和老年代(Old Generation)。新生代又分为三个部分:Eden区、Survivor区(Survivor0和Survivor1)。

  • Eden区:存放大多数短期对象,占比约为8/10。
  • Survivor区:存放经过一次垃圾回收后仍然存活的对象,用于降低内存碎片。
  • 老年代:存放存活时间长的对象,通常采用标记-整理算法进行回收。

1.2 垃圾回收时机

  • 新生代回收(Minor GC):频繁进行,采用复制算法。
  • 老年代回收(Full GC):较少进行,采用标记-整理算法。

二、对象可回收性判断

判断对象是否可回收是垃圾回收的关键步骤,主要使用引用计数算法和可达性分析算法。

2.1 引用计数算法

通过维护每个对象的引用数量,判断是否为0来决定是否回收。优点是实现简单且效率高,但无法处理循环引用问题。

2.2 可达性分析算法

通过从GC Roots出发,沿着引用链进行搜索,判断对象是否还能被其他对象引用。GC Roots包括:

  • 虚拟机栈中的引用对象
  • 方法区(Metaspace)中的静态属性引用
  • 方法区中的常量引用
  • 本地方法栈中的方法引用

2.3 强引用、软引用、弱引用、虚引用

为了应对不同内存需求,Java引入了四种引用:

  • 强引用:垃圾回收器不会回收。
  • 软引用:在内存不足时回收。
  • 弱引用:只能存活到垃圾回收前。
  • 虚引用:用于跟踪对象垃圾回收事件。

三、垃圾收集算法

垃圾收集算法主要包括标记清除、复制算法、标记-整理算法和分代收集算法。

3.1 标记清除算法

首先标记所有需要回收的对象,然后统一回收。优点是简单,缺点是效率低且内存碎片较多。

3.2 复制算法

将内存划分为两块,采用复制的方式进行垃圾回收。适用于新生代,效率较高。

3.3 标记-整理算法

将存活对象集中到一侧,清理另一侧的内存。适用于老年代,效率介于标记清除和复制算法之间。

3.4 分代收集算法

根据对象存活周期将堆划分为不同的代,并为每个代选择最适的收集算法。新生代采用复制算法,老年代采用标记-整理算法。

四、分代收集算法的内存回收策略

4.1 新生代和老年代

  • 新生代:主要存放短期对象,垃圾回收快,称为Minor GC。
  • 老年代:存放长期对象,垃圾回收较慢,称为Full GC。

4.2 内存分配策略

  • 对象优先分配给Eden区。
  • 大对象直接进入老年代。
  • 长期存活的对象进入老年代。
  • 使用动态年龄判定机制,分配到适当代。

五、垃圾收集器

Java提供了多种垃圾收集器,主要区分为新生代和老年代收集器。

5.1 Serial收集器

单线程新生代收集器,适合环境简单的场景。

5.2 ParNew收集器

多线程新生代收集器,性能比Serial收集器更好。

5.3 Serial Old收集器

多线程老年代收集器,适合老年代回收。

5.4 Parallel Scavenge收集器

多线程新生代收集器,注重系统吞吐量。

5.5 Parallel Old收集器

多线程老年代收集器,性能优于Serial Old收集器。

5.6 CMS收集器

多线程老年代收集器,以最短停顿时间为目标。

5.7 G1收集器

JDK7新增的收集器,支持整个堆的回收,适合多种环境。

通过以上内容,可以全面了解Java垃圾回收机制的实现原理和内存管理策略。

转载地址:http://tzmzz.baihongyu.com/

你可能感兴趣的文章
nginx 配置https(一)—— 自签名证书
查看>>
nginx 配置~~~本身就是一个静态资源的服务器
查看>>
Nginx 配置解析:从基础到高级应用指南
查看>>
nginx+Tomcat性能监控
查看>>
Nginx下配置codeigniter框架方法
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
查看>>
nginx添加模块与https支持
查看>>
Nginx用户认证
查看>>
Nginx的Rewrite正则表达式,匹配非某单词
查看>>
Nginx的使用总结(一)
查看>>
Nginx的使用总结(二)
查看>>
Nginx的可视化神器nginx-gui的下载配置和使用
查看>>
Nginx的是什么?干什么用的?
查看>>
Nginx访问控制_登陆权限的控制(http_auth_basic_module)
查看>>
nginx负载均衡器处理session共享的几种方法(转)
查看>>
nginx负载均衡的5种策略(转载)
查看>>
nginx负载均衡的五种算法
查看>>
Nginx运维与实战(二)-Https配置
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>