黑马JVM总结(十一)

(1)垃圾回收概述

前面我们学了堆,里面有一个垃圾回收的机制 

(2)判断垃圾_引用计数

指只要有一个对象被其他变量所引用,我们就让这个对象的计数加1,有个一变量不在引用,让它的计数减一,当这个对象的计数变为0的时候,说明没有变量引用它了,那么他就可以作为一个垃圾进行一个回收,但是引用计数存在一个弊端:存在循环引用问题:

a对象引用b对象,b对象的引用计数为1。b对象引用a对象,a对象的引用计数为1,但是没有谁用再引用他们啦,是不是以为这他们俩可以被垃圾回收呢了,答案是不行,因为他们的引用计数都为1虽然这两个对象都不会再使用了他们的引用计数不能归零导致不能被垃圾回收,造成了内存上的泄露

派森虚拟机采用的是这种算法但是我们Java虚拟机既不会采用这种算法:而是采用可达性分析

 (3)判断垃圾_可达性分析_根对象

可达性分析呢需要首先确定一系列根对象,根对象是哪些肯定不能别当做垃圾的对象,我们称之为根对象,在垃圾回收之前我们会对堆内存中的所有对象进行一遍扫描,看看每一个对象是不是刚才提到的根对象所直接或者间接引用,如果被直接或间接的引用过,就不能被回收

通过一个工具可以查看根对象:

MAT工具需要跟jmap工具一起使用 ,MAT需要jmap工具配合jmap先把内存快照抓取下来,才能使用MAT工具进行进一步分析

使用jps:查看一下进程id:

 

先需要使用jmap工具把内存快照抓取下来,转储成一个文件:dump文件的参数=b为二进制,live:为抓取哪些存货的对象,live在抓取之前进行一个垃圾回收,file:抓取的的内存快照 存成一个文件

执行到2再抓取一下,存为另外一个文件:

打开MAT工具:选择抓取的快照文件:

有一个显示图:对内存占用多的对象有哪些

还可以查看抓取的快照的根对象有哪些 

分为以下类: 

(1)System Class:系统类,是由启动类加载器加载的类,核心的类,

(2)java虚拟机在执行一些方法调用时去调用操作系统的方法,操作系统方法在执行时所引用的一些java对象,也是可以作为根对象 

 

一些活动线程:活动线程中正在使用的一些对象不能当做垃圾的

线程运行时由一个个的方法调用组成,每次方法调用嫩都会产生一个栈帧,栈帧内所使用的一些东西可以作为根对象

 主线程内:栈帧内用到的变量的情况,他们用到的一些局部变量,这些局部变量所引用的对象,都可以作为根对象,局部变量时存在栈帧里的new 的对象是存在堆里的,根对象是指堆中的哪些对象而不是栈帧里的局部变量引用

比如代码中创建的ArrayList集合对象

 

(3)Java对象中有个同步锁机制,Syschorlnize关键字如果对一个对象加了锁,被加锁的对象不能被当做垃圾的,正在加锁的对象作为根对象

 第二个存储文件:

当19行list局部变量为null ,不在应用ArrayList对象了,因为我们执行了jamp:里面有live参数,它会主动执行一次垃圾回收,它会把不在引用改的Arraylist对象回收掉了,所以在根对象列表中就没有ArrayList对象了

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D动画制作和渲染需要什么样的硬件规格?

动画是艺术与技术的令人兴奋的融合,为无限的创造力提供了广阔的画布。为了将创意愿景变为现实,动画师需要适合其工艺的强大计算资源。每个动画项目都有不同的硬件需求,无论是制作简单的 2D 动画还是构建复杂的 3D 世界。因此,有抱…

网络编程——基础知识

全文目录 网络发展协议OSI七层模型TCP/IP五层(或四层)模型 网络传输网络地址IP地址MAC地址 网络通信的本质 网络发展 网络没有出来之前计算机都是相互独立的: 网络就是将独立的计算机连接在一起,局域网和广域网的区别只是范围上的大小: 局域…

华为云云服务器云耀L实例评测 | 从零开始:华为云云服务器L实例使用教程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

打造“共富果园” 广东乳源推动茶油全产业链高质量发展

新华网广州9月13日电(李庆招)金秋九月,瓜果飘香,油茶也将迎来采摘期。13日,一场以“中国健康油 茶油新势力”为主题的乳源茶油12221市场体系之产业大会暨供销对接会在广州举行。来自茶油行业的专家、企业家齐聚一堂&am…

高性能数据JS网格 Bryntum Grid 5.5.2 Crack

高性能数据网格 Bryntum Grid 是一个高性能的网络表格组件。它是用纯 JavaScript 构建的,并且可以轻松地与所有主要 JS 框架集成。 功能丰富 Bryntum Grid 具有您期望从专业网格组件获得的所有功能,包括: 很好的表现;很好的绩效 没有人喜欢缓…

Stable Diffusion 系统教程 | 强大的ControlNet 控制网

2023年的2月13日,一款名叫ControlNet的插件横空出世,AI绘画变得更加可控 ControlNet直译过来很简单,就叫做控制网,开发者是一名华裔,毕业于苏州大学,目前在斯坦福做读博士一年级,大佬大佬&…

Vivado XADC IP核 使用详解

本文介绍Vivado中XADC Wizard V3.3的使用方法。 XADC简介 XADC Wizard Basic Interface Options: 一共三种,分别是AXI4Lite、DRP、None。勾选后可在界面左侧看到相应通信接口情况。Startup Channel Selection Simultaneous Selection:同时监…

【C语言】指针的进阶(二)—— 回调函数的讲解以及qsort函数的使用方式

目录 1、函数指针数组 1.1、函数指针数组是什么? 1.2、函数指针数组的用途:转移表 2、扩展:指向函数指针的数组的指针 3、回调函数 3.1、回调函数介绍 3.2、回调函数的案例:qsort函数 3.2.1、回顾冒泡排序 3.2.1、什么是qso…

RFID插件,物联网技术新利器_三叠云

RFID 插件 路径 拓展 >> 插件 功能简介 新增「RFID」插件。RFID 插件使系统对资产管理、人员定位、进出库管理等自动化应用全面适配,极大拓展了三叠云系统的应用场景。 示例: RFID在表单中应用: RFID在移动端应用: 实时…

腾讯轻联:带你创造属于自己的AI小助手

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:参加腾讯全球数字生态大会,了解到腾讯轻联企业…

Java8中判断一个对象不为空存在一个类对象是哪个

Java8中判断一个对象不为空存在一个类对象是哪个? 在Java 8中,你可以使用java.util.Optional类来处理可能为空的对象。Optional类可以帮助你优雅地处理空值情况,而不需要显式地进行空值检查。 这是一个简单的Optional示例: imp…

java反序列化---URLDNS链

目录 一、前言 二、原理分析 三、代码实现 一、前言 URLDNS链相较于其他java反序列化链是比较简单的,只需要几步调用就能触发 所以学习java反序列化,最好从URLDNS链出发,初步了解如何跟进,以及反射获取类、方法等 使用这条链…

面试中常见的算法题和其python实现

在面试中,常见的算法题包括排序算法、查找算法、动态规划、贪心算法等。以下是一些常见算法题及其Python实现示例: 1. 快速排序(Quick Sort): 题目描述:给定一个数组,使用快速排序算法对数组进…

不负昭华,前程似锦,新一批研发效能认证证书颁发丨IDCF

亲爱的认证学员, 恭喜你成功获得由国家工业和信息化部教育与考试中心颁发的职业技术证书——《研发效能(DevOps)工程师国家职业技术认证》。你的努力和才华得到了官方的认可,这是你职业生涯中的一个重要的里程碑。 这个证书不仅代表着你的专业知识和技…

c语言练习61:malloc和free

malloc和free malloc C语⾔提供了⼀个动态内存开辟的函数: 1 void* malloc (size_t size); 这个函数向内存申请⼀块连续可⽤的空间,并返回指向这块空间的指针。 • 如果开辟成功,则返回⼀个指向开辟好空间的指针。 • 如果开辟失败&…

解决 Cannot read property ‘key‘ of undefined

目录 问题解决1解决2最终 问题 现场环境分页查询某些条件项查询时,分页接口获取成功但是数据不渲染,页面像是卡住了: 报错 Cannot read property key of undefined 解决1 有人说 使用的el-pagination在格式化代码的时候layout属性的参数会多加…

ACM MM 2023 | 基于点集和偏置的单阶段多人人体解析方法

本文为我们刚刚被ACM MM2023接收的工作“Single-Stage Multi-Human Parsing via Point Sets and Center-Based Offsets”的分享报告。 论文链接: https://arxiv.org/abs/2304.11356 01. 前言 EVOL创新团队与北京邮电大学共同提出多人人体解析方法SMP,利…

IM即时通讯系统[SpringBoot+Netty]——梳理(总)

文章目录 一、为什么要自研一套即时通讯系统1、实现一个即时通讯系统有哪些方式1.1、使用开源产品做二次开发或直接使用1.2、使用付费的云服务商1.3、自研 2、如何自研一套即时通讯系统2.1、早期即时通讯系统是如何实现2.2、一套即时通讯系统的基本组成2.3、当下的即时通讯系统…

华为云云耀云服务器L实例评测|cento7.9在线使用cloudShell下载rpm解压包安装mysql并开启远程访问

文章目录 ⭐前言⭐使用华为cloudShell连接远程服务器💖 进入华为云耀服务器控制台💖 选择cloudShell ⭐安装mysql压缩包💖 wget下载💖 tar解压💖 安装步骤💖 初始化数据库💖 修改密码&#x1f4…

一周技术杂谈2023_09_11--2023_09_15

平铺直述! 1、linux 64位系统可以运行32位linux程序。需要在linux64位系统新增一些设置: sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libc6:i386 libncurses5:i386 libstdc6:i386 其他已验证:32位用到的系统库无需替换…