IT袋

当前位置:主页 > 经验教程 > 建站编程 >

JVM如何进行垃圾回收

JVM如何进行垃圾回收?

时间:2024-01-19 13:40:21 来源:IT袋 作者:马勇
导读:JVM如何进行垃圾回收,小编为大家说一说JVM如何进行垃圾回收的相关介绍,接下来IT袋网带大家一起了解。 JVM 这一块面试现在已经成为中大厂的面试必考点,就算你面试简历上没有写 JVM,但面

JVM如何进行垃圾回收

小编为大家说一说JVM如何进行垃圾回收的相关介绍,接下来IT袋网带大家一起了解。

JVM 这一块面试现在已经成为中大厂的面试必考点,就算你面试简历上没有写 JVM,但面试官还是有可能会问你关于 JVM 垃圾回收这一块的知识。

本文将对 JVM 垃圾回收这方面的知识展开精简的分析,采用图文结合的方式,加强读者的记忆。

题目

JVM 如何进行垃圾回收?

推荐解析

1)JVM 主要在哪里进行垃圾回收?

JVM 主要对内存中的对象的垃圾回收,又称为 GC 堆(Garbage Collected Heap)。

JDK 1.7 版本堆内存分配情况:

1.新生代

2.老年代

3.永久代

JDK 1.8 版本,永久代被元空间取代,而元空间使用的是直接内存,因此堆中只剩新生代和老年代。

JVM如何进行垃圾回收

2)内存分配原则

2.1)大多数情况下,对象首先在新生代的 Eden (伊甸园) 进行分配,当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC(新生代垃圾回收)。

2.2)大对象比如(字符串、数组)需要大量连续内存空间的对象直接进入老年代。

2.3)长期存活的对象将进入老年代,这块设计对象年龄的知识,一般情况下,当对象年龄达到 15,每次逃脱 Minor GC,就会增长一岁。特殊情况下,年龄并不会到达 15就会产生晋升,直接进入老年代,有兴趣的可以去详细了解 Hot Spot 虚拟机。而且不同的垃圾回收器的默认晋升年龄是不一样的,CMS 收集器默认晋升年龄是 6。

3)如何判断对象是否死亡?

引用计数法:有对象引用计数器 +1,引用失效,计数器 -1,但无法解决循环引用之间的问题。

举个例子:A 引用 B,B 引用 A,此时需要采用后文的可达性分析算法。

可达性分析法:将 GC Roots 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,证明此对象是不可用的。

首先需要了解哪些可以作为 GC Roots 根对象。

3.1)虚拟机栈(栈帧中的局部变量表)中引用的对象

3.2)本地方法栈(Native 方法)中引用的对象

3.3)方法区类静态属性引用的对象

3.4)方法区常量引用的对象

3.5)被同步锁持有的对象

3.6)JNT 引用的对象

3.7)类加载器

3.8)活跃线程(已启动且未停止的 Java 线程)

注意事项:对象被判断不可达之后并不会马上进行垃圾回收,被被标记第一次,然后进入一次筛选,当对象没有覆盖 finalized 方法或者 finalized 方法已经被虚拟机使用过了,那么就不会进行真正回收的队列,队列中还要经过第二次标记,两次都标记后,不可达,才可以被真正回收。

相关阅读

  • HTTP状态码深入解析:401 Unauthorized

    HTTP状态码深入解析:401 Unauthorized

    为大家介绍HTTP状态码深入解析的教程内容,接下来一起来看看吧。 在互联网通信中,HTTP状态码是用来表示服务器响应的一种方式。 当我们在浏览器中访问网页时,服务器会返回一个状态码,

  • 什么是跨站脚本 XSS攻击?

    什么是跨站脚本 XSS攻击?

    为网友解答什么是跨站脚本的相关话题,下面为详细的介绍。 跨站脚本(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用该漏洞在受害者的网页中插入恶意脚本,从而能够获取

  • 个人网站备案流程 工信部个人网站备案过程讲解

    个人网站备案流程 工信部个人网站备案过程讲解

    您可能不了解个人网站备案流程和工信部个人网站备案过程讲解的IT小经验,继续往下看吧! 嗨,大家好,我是希留。 前面文章介绍了下使用https访问网站的相关配置,然后发现访问https时灵时

  • dns服务器未响应怎么修复 分享dns未响应最简单的修复办法

    dns服务器未响应怎么修复 分享dns未响应最简单的修复办法

    今天为大家介绍dns服务器未响应怎么修复和分享dns未响应最简单的修复办法的教程内容,继续往下看吧! 很多人在浏览网页时,经常会遇到DNS服务器未响应的情况,那么什么是DNS服务器?DNS未