jvm的垃圾回收机制是什么_垃圾回收过程图片

jvm的垃圾回收机制是什么_垃圾回收过程图片如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题,netty,springboot,springcloud等系列文章,一系列干货随时送达,超神之路从此展开,BTAJ不再是梦想!垃圾回收的过程分为两步:1.判断对象是否死亡(1)引用计数器法:①每当有一个对象引用是,计数器加一,当计数器为0是对象死亡②缺点:无法解决循环引用的问题,假设A引用B,B引用A,那么这两个对象将不会被回收,造成内存泄漏(2)可达性算法分析①通过一系列可作为GCRoot

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂
垃圾回收的过程分为两步:

1.判断对象是否死亡

(1)引用计数器法:

①每当有一个对象引用是,计数器加一,当计数器为0是对象死亡

②缺点:无法解决循环引用的问题,假设A引用B,B引用A,那么这两个对象将不会被回收,造成内存泄漏

(2)可达性算法分析

①通过一系列可作为GC Roots的节点为起始点,从这些节点开始往下搜索,所走过的路径称为引用链。

②当一个对象到GC Roots节点没有引用链时,说明对象不可用

③可作为GC Roots节点的对象

虚拟机栈中引用的对象

本地方法栈中引用的对象

方法区中静态变量引用的对象

方法区中常量引用的对象

2.垃圾回收算法进行回收

(1)标记-清除:即直接将标记为死亡的对象清除,缺点是会产生垃圾碎片

(2)标记-整理:即将可用的对象同意向一端移动,将边界外的对象清除

(3)复制算法:即将堆分为了Eden,SurvivorFrom,SurvivorTo空间

①每次在Eden空间上分配对象

②SurvivorFrom空间为上次垃圾回收是还存活的对象

③SurvivorTo空间为本次垃圾回收是生存的对象存放的位置

④本次垃圾回收结束后交换SurvivorFrom与SurvivorTo

⑤复制算法需要担保空间,当有一个大的对象要分配,而Eden空间又不足时会直接分配到老年代

⑥在对象生存率较高时会进行大量的复制操作,降低效率

(4)分代回收算法:根据新生代与老年代对象的特点而使用不同的垃圾会回收算法

①新生代:对象生存周期较短,只有少量的生存对象,适合使用复制算法

②老年代:对象生存周期较长,只又少量需要回收的对象,且无担保空间,所以使用标记-整理算法或者是标记-清除算法

如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197356.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • width:100vh有感而发「建议收藏」

    width:100vh有感而发「建议收藏」在看一个网页的代码是看到width:100vh 纳尼。。。这这我怎么没有见过,这是个什么属性,随之有看到min-height:calc(100vh+51px);这尼玛又是怎么用的….感叹入行已整整两年却…先介绍一下vh:相对于视窗的高度,那么vw:则是相对于视窗的高度“视区”所指为浏览器内部的可视区域大小,即window.innerWidth/window.inn

  • php网页设计导航栏代码,总结7种常见的导航条制作实例

    php网页设计导航栏代码,总结7种常见的导航条制作实例导航条是网页设计中不可缺少的部分,它是指通过一定的技术手段,为网站的访问者提供一定的途径,使其可以方便地访问到所需的内容,是人们浏览网站时可以快速从一个页面转到另一个页面的快速通道。利用导航条,我们就可以快速找到我们想要浏览的页面。今天分享一下简单导航栏的制作方法:第一步:引入css样式表,新建一个id为nav的层,使用、、标签来制作完成效果。这篇文章主要为大家详细介绍了微信小程序实战之顶部导航栏…

  • redis如何查看版本号_redis版本号

    redis如何查看版本号_redis版本号linux环境下查看redis的版本:查看redis的版本有两种方式:1.redis-server–version和redis-server-v 得到的结果是:Redisserverv=3.2.12sha=00000000:0malloc=jemalloc-3.6.0bits=641.redis-cli–version和redis-cli-…

    2022年10月19日
  • xshell怎么配置_winedt使用教程

    xshell怎么配置_winedt使用教程一、XShell的作用二、下载XShell三、安装XShell四、使用XShell连接Linux服务器Xshell免费版官网下载地址:https://www.xshell.com/zh/free-for-home-school/如官网打不开,可以从网盘下载链接:https://pan.baidu.com/s/1NJGWZHkByakOkQpKfkc7Yg提取码:r0ds

  • java IO流面试总结

    java IO流面试总结javaIO流面试总结

  • java中的输入操作

    java中的输入操作Java中输入一般是通过Scanner类来实现的:具体步骤如下:(1)创建Scanner对象,接受从控制台输入Scannerinput=newScanner(System.in);(2)接受String类型Stringstr=newinput.next();(3)接受int类型intn=input.nextInt();(4)输出结果System.out.println(str);Sys…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号