JVM垃圾回收机制简介

221e0feda35c4d579dac202dc18f644b.jpg内存管理

 

Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放。

对象空间的分配:使用new关键字创建对象即可

对象空间的释放:将对象赋值null即可。垃圾回收器将负责所有“不可达”对象的内存空间。

垃圾回收过程

任何一种垃圾回收算法一般都要做两件基本事情:

 

发现无用的对象。

回收无用对象占用的内存空间。

垃圾回收机制保证可以将"无用的对象"进行回收。无用的对象指的就是没有任何变量引用该对象。java的垃圾回收器通过相关算法发现无用对象,并进行清楚和整理。

 

详细过程

 

新创建的对象,绝大多数都会存储在Eden中。

当Eden区满了(达到一定的比例)不能创建新对象。则会触发垃圾回收(GC),将无用对象清理掉,然后将剩余对象复制到某个Survivor中,同时清理Eden区。

当Eden区再次满时,会将Survivor1中的不能清空的对象,存放的Survivor2中,同时将Eden区中的不能清空的对象,也复制到S1中,保证Eden和S1,均被清空。

重复多次(默认15次)Survivor中没有被清理的对象,则会复制到年老去Old(Tenured)区中。

当OLd区满了,则会触发一次完整的垃圾回收(FullGc),之前新生代的垃圾回收称为(minorGC)

垃圾回收相关算法

引用计算法

 

堆中每个对象都用一个引用计数。被引用一次,计数加1,直接到计数为0,则表示变成无用对象。优点是算法简单,缺点是“循环引用的无用对象”无法被识别。

 

public class Student{

    String name;

    Student friend;

    Public static void main (String [] args){

        Student s1 = new Student();

        Student s2 = new Student();

        s1.friend = s2;

        s2.friend = s1;

        s1 = null;

        s2 = null;

      

    }

s1和s2互相引用对方,导致他们引用计数不为0,但是实际已经无用,但无法被识别。

 

引用可达法(根搜索算法)

 

程序把所有的引用关系看作一张图,从一个节点GC ROOT开始。寻找对应的引用节点,找到这个节点以后。继续寻找这个节点的引用及诶单。当所有的引用节点寻找完毕之后,剩余的节点则被任务是没有被引用的节点,即无用的节点。

 

垃圾回收机制关键点

 

• 垃圾回收机制只回收JVM堆内存里的对象空间。

 

• 对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力

 

• 现在的JVM有多种垃圾回收实现算法,表现各异。

 

• 垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。

 

• 可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。

 

• 程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有

 

一些效果,但是系统是否进行垃圾回收依然不确定。

 

• 垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一 个新的引用变量重新引用该对象,则会重新激活对象)。

 

• 永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6708.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯web备赛——Node.js

node.js之前只能说是略有了解,这次好好了解一下吧! 东西还是比较多的。 目前来看就了解比赛会用到的http模块就可以了,其他的暂且不做了解 const http require("http");//1.引入http模块const app http.createServer();//2.创建…

华为OD机试题【狼羊过河 or 羊、狼、农夫过河】用 C++ 编码,速通

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:狼羊过河 or 羊、狼、农夫过河…

Stata 回归结果详解

目录一、数据信息二、指标1.上半部分2.下半部分三、详细解释SSM - 模型平方和SSR - 残差平方和SST - 总平方和R-squared - R方 - 拟合系数Adj R-squared - 调整后的拟合系数df - 自由度MS - 均方差F - 总体显著性检验Prob > F - P值Root MSECoef.Std. Err.tP > | t |95% …

Python(黄金时代)—— python深入使用

深拷贝和浅拷贝 可变类型与不可变类型 可变对象是指,一个对象在不改变其引用的前提下,可以修改其所指向的地址中的值 不可变对象是指,一个对象引用指向的值是不能修改的 浅拷贝 浅拷贝是对于一个对象的顶层拷贝; 简单理解就是&…

蓝桥杯基础8:BASIC-7试题 特殊的数字

资源限制 内存限制:512.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 153是一个非常特殊的数,它等于它的每位数字的立方和,即1531*1*15*5*53*3*3。编程求所有满足这种条件…

JavaSE——运算符

目录 一.运算符 二.赋值运算符 三.算术运算符 1.四则运算 2.加法运算 3.除法运算 4.取模运算 5.增量运算符 6.自增自减 四.关系运算符 五.逻辑运算符 1.逻辑与 && 2.逻辑或 || 3.逻辑非 ! 4. 短路求值 六.位运算符 1.按位与& 2.按位…

6款无版权可商用的图片网站

今天给大家分享几个无版权可商用的图片网站,无论是网页设计、还是数字营销、商业海报制作等等都可以非常简单方便的查询到自己想要的图片。 免费可商用图标库 unDraw https://undraw.co/illustrations unDraw是作者Katerina Limpitsouni一手创作的扁平化图标库&…

国内IT软件外包公司汇总(2023 最新版)!

大环境不行,面试太少了,很多本科生想进外包都没机会。非常时期,不需要在意那么多,外包作为过渡也是没问题的,很多外包其实比小公司还要好多了。 也不要太担心去外包会污染自己的简历,只要接触的项目还可以…

电商平台API接口,店铺所有商品

item_search_shop-店铺的所有商品 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥(注册Key和secret接入: https://o0b.cn/anzexi)api_nameString是API接口名称(包括…

动态规划-构造最优二叉树的解路径_20230403

动态规划-最优二叉搜索树的解路径(算法导论) 前言 本文将探索递归的先序和后续对信息表达的影响,通过考察最优二叉搜索树的解roo[i][j]的解,我们可以分析先序和后续遍历之间的互相转换关系,以及为了转换,所付出的空间…

蓝桥杯第23天(Python)(疯狂刷题第6天)

题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…

下一个系统不是Win12,微软要复活Win10X

先是 Windows 三年发布周期回归又是官方 UI 泄露,再到前不久新增的测试频道… 微软将在2024年推出或许名为 Windows 12 的下一代系统基本已经板上钉钉了。 相比过去,小蝾总觉得即便是换代更新能带来的震撼都越来越少了。 当年每一个版本都是划时代的更…

.net C#反编译及脱壳常用工具--小结

1、Reflector --微软自家工具--推荐 Reflector是最为流行的.Net反编译工具。Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使NET程序员眼前豁然开朗,因为这个免费工具可以将NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转…

【学习笔记、面试准备】机器学习西瓜书要点归纳和课后习题参考答案——第3章

机器学习西瓜书要点归纳第3章 线性模型3.1 基本形式3.2 线性回归3.3 对数几率回归3.4 线性判别分析3.5 多分类学习3.6 类别不平衡问题3.7 阅读材料习题目录地址 第3章 线性模型 3.1 基本形式 线性模型定义: 其中x是输入向量 优点:形式简单&#xff…

C#中的转换

一、什么是转换 将一个类型转换为另外一个类型;可以是两个值类型之间的转换;可以是两个引用类型之间的转换;可以是值类型和引用类型之间的转换(拆箱与装箱);可以用户自定义转换。转换的时候有隐式转换/自动…

lombok快速入门

Lombok是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 <…

好用到爆的windows文件检索工具--Everything

如果你的电脑是windows系统&#xff0c;那么这款软件强烈推荐大家安装>Everything&#xff0c;他可以帮助你快速的检索的磁盘里的文件&#xff0c;话不多说&#xff0c;开始安装 1.下载 访问https://www.voidtools.com/zh-cn/会跳转官方下载地址 双击安装包运行 效果如下…

Tensor张量基础与常用方法【Pytorch】

Tensor中文译名为张量&#xff0c;标量是零维张量&#xff0c;向量是一维张量&#xff0c;矩阵是二维张量&#xff0c;矩阵的堆叠是三维张量…… 张量的维数可以无穷大&#xff0c;不过由于现实世界是三维的&#xff0c;因此更高维度的图形我们无法想象&#xff0c;但是这并不…

即时通讯-6-已读回执的方案设计

背景-为什么展示已读未读 部分即时通讯软件会选择展示给用户已读未读&#xff0c; 主要是快速感知对方的阅读状态&#xff0c; 感觉到自己受重视&#xff0c; 方便做下一步操作。 如果要带点高度的讲&#xff0c;满足软件所代表的关键用户的诉求 什么场景下要展示已读回执 t…

462. 最小操作次数使数组元素相等 II——【Leetcode每日一题】

462. 最小操作次数使数组元素相等 II 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;2 …
最新文章