虚拟机的垃圾收集(一)

news2024/11/24 11:42:15

       虚拟机就好比是一个有限空间的一个房子,在我们生活中,也会产生各种各样的垃圾,虚拟机也不例外,垃圾满了会造成内存溢出等问题,那虚拟机是怎么进行垃圾回收的呢?让我们来揭开这神秘的面纱

1.概述

程序计数器、虚拟机栈、本地方法栈都是随着线程而生,随着线程而灭,当方法结束时或者是线程结束时,内存会自动进行回收。但是堆和方法区则不同,他们具有不确定性,比如在线程运行的时候,我们并不确定会创建多少个对象,多少个方法,每个对象或者方法会被分配多少内存,一切的一切都是未知因数,故为动态。

2.“死亡”还是“生存”?

下来我们来介绍两种判断对象是否死亡的方法

1.引用计数算法

 但是有一种情况不方便。就是两个对象互相引用循环,以至于计数器无法回收

 2.可达性分析

通过一个GC Roots的根对象作为起始点,向下搜索,路径称为引用链,如果对象和这个GC Roots没有任何的引用链连接,就会被判定为可回收对象

GC Roots的对象包括以下几种:

  • 在虚拟机栈(栈帧中的本地变量表)中引用的对象(方法堆栈中使用到的参数、局部变量、临时变量等)
  • 在方法区中类静态属性引用的对象(java类的引用类型静态变量)
  • 在方法区中常量引用的对象(字符串常量池中的引用)
  • 在本地方法栈中(Native方法)引用的对象
  • java虚拟机内部引用(基本类型对应的class对象,部分异常对象)、系统类加载器
  • 所有被同步锁持有的对象
  • 本地代码缓存
  • 区域不同,其他临时性的对象

 3.引用

一共分为四种引用强引用、软引用、弱引用、虚引用

  • 强引用:在程序代码中普遍存在的引用赋值
Odject object=new Objet();
  • 软引用:有用且非必要的对象,在内存溢出时会进行二次回收
  • 弱引用:非必要对象,只能生存到下一次垃圾收集为止
  • 虚引用:无实在性的作用,唯一目的只是在这个对象被收集时收到一个系统通知

 4.死亡前的最后一根稻草

在以前在刑场上经常会有关键的救命文书,在虚拟机里也有类似的情况,被可达性算法判定为不可达对象,对象只是判为“缓刑”,而不是真正的立即处死,它真正的判断死亡需要2次标记,具体看下图

 

5.回收方法区

方法区回收主要是两部分:

1.废弃的常量

2.不在使用的类型

那如何判断一个常量是否废弃呢?下面3个条件至关重要

  • 该类的所有实例均被回收
  • 加载该类的加载器已被回收
  • 该类的java.lang.class对象没有在任何地方进行引用

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

融一亿但被质疑的5ire为何大家有分歧

5ire是由印度裔企业家 Pratik Gauri 和 Prateek Dwivedi 以及 Web3 金融家 Vilma Mattila 于 2021 年 8 月创立的区块链项目,官方在2022年7月公布以15亿美元估值获得一亿美元融资,机构为英国企业集团 SRAM & MRAM Group ,成为印度的第 10…

[附源码]Python计算机毕业设计高校教材管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

电影《海贼王:红发歌姬》观后感

上周,北京已经开始陆续解封了,电影院也可以进入了,只要持有48小时核算就行,于是去看了这部电影《海贼王:红发歌姬》,去看之前,看了预告片,讲述路飞小时候的玩伴乌塔,长大…

NLP创业破局,如何摘取更高处的果实

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入!2022年,云从科技、商汤科技先后登陆资本市场,计算机视觉四小龙中的旷视科技、依图科技也在摩拳擦掌。反观NLP领域,相关企业的发展速度、融资规模、上市进程仿佛都要略逊一筹&…

java计算机毕业设计基于安卓Android的二手交易app-闲置物品交易app-ssm

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设…

数组 reduce 方法使用记录

概述 reduce()方法对数组中每个元素执行一次 reduce()函数 —升序执行,将其结果汇总为单个返回值。 reduce方法可做的事情特别多,就是训话遍历能做的,reduce都可以做,比如:数组求和&#…

Vue基础快速入门

目录 1.vue基础 1.1vue项目创建 1.2 el挂载 1.3.data数据对象 2.本地应用 2.1.内容绑定,事件绑定 v-text ​v-html 传递自定义参数,事件修饰符 总结: 结合使用:计数器 2.2.显示切换,属性绑定 v-show v…

【笔记】计算机组成原理复习重点——篇一

计算机组成原理复习重点笔记 计算机组成原理计算机体系结构 学科基础必修课 研究生入学考试全国联考45分,占比30% 64学时,4学分,上课56,实验8 教材:计算机组成原理(第二版 ) 唐朔飞 高等教育出版社 目录(已…

快速创建servlet(doGet和doPost)

目录 前言必读 一、概述 一、创建方式 1.在需要创建的包下进行创建 2.自定义类名--->类这里添加一个类名(和上面的名称一样名字) ------>勾选创建并确定 3.创建完成代码 4.删掉多余的 二、升级生成的模板 1.点击文件--设置里面 2.在编…

Simulink| “双碳”背景下汽车减少碳排放建模与仿真

目录 一、概述 二、模型 三、Simulink模型 四、matlab代码 一、概述 温室气体的过量排放会增强温室效应,造成全球极端气候的出现,严重影响人类的生存与发展,因此,控制温室气体减排已成为当前环保的重点。根据联合国政府间气…

Linux系统搭建redis-cluster集群案例

Linux系统搭建redis-cluster集群案例(一)redis下载及安装【1】前言介绍【2】redis下载以及安装(1)首先要进入Linux系统的根目录(2)安装redis所需的环境(3)下载redis源码包&#xff0…

k8s 中部署kafka集群

由于开发过程中使用到了kafka,又不想自己部署kafka,索性采用k8s 部署kafka集群,以求做到随时插拔。 创建命名空间 apiVersion: v1 kind: Namespace metadata:name: "kafka"labels:name: "kafka"sudo kubectl apply -f …

linux篇【12】:计算机网络——tcp

目录 一.TCP套接字接口 1.inet_aton (和inet_addr一样,换一种方式而已) 2.listen——把套接字设置为监听状态 3.服务器获取客户端的连接 accept 返回值中套接字和参数中套接字的作用: 4.用到的部分函数 (1&…

技术分享 | MySQL 多版本并发控制「MVCC」

作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、MySQL InnoD…

TaxiBGC ——分类学指导下的生物合成基因簇鉴定流程

谷禾健康 当前合成基因簇预测限制较大 微生物基因组中的生物合成基因簇 (BGC) 编码具有生物活性的次级代谢物 (SM),它可以在微生物-微生物和宿主-微生物相互作用中发挥重要作用。 鉴于次级代谢物的生物学意义和当前对微生物组代谢功能的深刻兴趣,从高通…

通过 ffmpeg 串流对接 OBS 等直播软件

我们要将设备通过私有通道输出到 H264 流,传给 OBS 等直播软件使用。为此,设计了上图所示的串流工具。 设计思路 私有通道通过 API 接口提供 H264 流,要传给 ffmpeg ,最简单的方法是通过进程间管道传输数据。这里 Dump 工具直接…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java美丽华驾校信息管理系统t93d7

毕业设计也不需要做多高端的程序,毕业设计对于大多数同学来说,为什么感觉到难,最重要的一个原因,那就是理论课到实践课的转变,很多人一下不适应,本能开始拒绝,如果是一个考试,大家都…

使用自定义函数实现数据编解码、格式处理与业务告警

背景 在物联网平台的设备数据接入场景中,开发者总是希望平台接入的设备数据格式标准统一,以便对数据进行统一处理。在实际情况中,由于业务需要,平台常常会面对不同类型、不同厂商的设备接入。即使设备接入协议已经统一使用 MQTT …

傻白探索Chiplet,Chiplet技术带来的“新四化”(三)

目录 一、IP芯片化 二、异质集成(HeteroMaterial Integration) 三、异构集成(HeteroStructure Integration) 四、IO增量化 五、总结 一、IP芯片化 IP(Intelligent Property)是具有知识产权核的集成电…

腾讯前端常考vue面试题(必备)

虚拟DOM的优劣如何? 优点: 保证性能下限: 虚拟DOM可以经过diff找出最小差异,然后批量进行patch,这种操作虽然比不上手动优化,但是比起粗暴的DOM操作性能要好很多,因此虚拟DOM可以保证性能下限无需手动操作DOM: 虚拟DOM的diff和patch都是在一次更新中自动进行的,我们无需手动…