总结jvm中GC机制(垃圾回收)

前言

本篇博客博主将介绍jvm中的GC机制,坐好板凳发车啦~~

一.GC相关

1.1回收栈内存

对于虚拟机栈,本地方法栈这部分区域而言,其生命周期与相关线程相关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回收了。

1.2回收堆内存与方法区内存

我们所讲的有关内存分配和回收关注的为Java堆与方法区这两个区域

Java堆中存放着几乎所有的对象实例,垃圾回收器在对堆进行垃圾回收前,首先要判断这些对象哪些还存活,哪些已经“死去”。

1.3死亡对象的判断

1.引用计数法

2.可达性分析算法

对象5-7之间虽然彼此还有关联,但是它们到GC Roots是不可达的,因此它们会判定为可回收对象。

在Java语言中,可作为GC Roots 的对象包含下面几种:

1.虚拟机栈(栈帧中的本地变量表)中引用的对象;

2.方法区中类静态属性引用的对象;

3.方法区中常量引用的对象;

4.本地方法栈中JNI(Native 方法)引用的对象。

1.4垃圾回收的指导思想

1.4.1标记-清除思想

“标记-清除”算法是最基础的收集算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象

缺点

1.效率问题:标记和清除这两个过程效率都不高;

2.会产生内存碎片化问题。

1.4.2复制算法思想

1.4.3标记-整理算法思想

1.4.4分代算法思想

垃圾回收过程:

1.5Minor GC 和 Full GC

1.6垃圾收集器

如果说上面的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。

1.6.1为什么有这么多垃圾回收器

⾃从有了 Java 语⾔就有了垃圾收集器,这么多垃圾收集器其实是历史发展的产物。最早的垃圾收集器为 Serial,也就是串⾏执⾏的垃圾收集器,Serial Old 为串⾏的⽼年代收集器,⽽随着时间的发展,为了提升更⾼的性能,于是有了 Serial 多线程版的垃圾收集器 ParNew。后来⼈们想要更⾼吞吐量 的垃圾收集器,吞吐量是指单位时间内成功回收垃圾的数量,于是就有了吞吐量优先的垃圾收集器 Parallel Scavenge(吞吐量优先的新⽣代垃圾收集器)和 Parallel Old(吞吐量优先的⽼年代垃圾收集器)。随着技术的发展后来⼜有了 CMS(Concurrent Mark Sweep)垃圾收集器,CMS 可以兼顾吞吐量和以获取最短回收停顿时间为⽬标的收集器,在 JDK 1.8(包含)之前 BS 系统的主流垃圾收集 器,⽽在 JDK 1.8 之后,出现了第⼀个既不完全属于新⽣代也不完全属于⽼年代的垃圾收集器 G1(Garbage First),G1 提供了基本不需要停⽌程序就可以收集垃圾的技术,下⾯我们来看每种垃圾收集器具体的介绍

1.6.2CMS收集器

1.6.3G1收集器

结果如下:

1.7总结:一个对象的一生

尾语

这篇博客到这里就结束啦,希望可以给大家带来帮助~~

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

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

相关文章

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

写在前面 关于数据科学环境的建立,可以参考我的博客: 【深耕 Python】Data Science with Python 数据科学(1)环境搭建 往期数据科学博文: 【深耕 Python】Data Science with Python 数据科学(2&#xf…

OpenHarmony实战:RK3568 开发板镜像烧录指南

前言 烧录开发板是每个开发者的必修课,每次对系统的修改务必进行烧录测试,确保修改正确和不会引入新问题。 本文基于 Windows10,以 RK3568 开发板为例,指导如何烧录 OpenHarmony 镜像,镜像也叫固件。Hihoop&#xff…

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入,注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码,返回了一个“admin的密码”: Hello admin! Your password is…

【C语言】函数(涉及生命周期与作用域)

文章目录 函数(function)**函数的概念****函数的作用**在本阶段一般会涉及到两类函数:库函数和自定义函数自定义函数**函数的语法形式** **形参和实参****实参和形参的关系** 函数返回值**函数返回值类型说明****return 语句** 数组做函数参数**函数嵌套…

adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月

登录adobe stock的官网,点击你想要下载的视频,然后点击免费下载,我们点击免费试用按钮,可以看到非常贵,需要80美金一个月,用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡,就可以白嫖一个…

idea(2023.1.3)配置全局Maven环境

问题来源一: 1、每次在下载依赖时,会遇到这样的报错信息,报错信息如下显示:sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid cert;百度结果是:通常表示IntelliJ IDEA …

事件队列事件循环(EventLoop) 宏任务 微任务详解 面试题

事件队列 事件循环 EventLoop 宏任务 微任务详解 一、概念二、宏任务(多个)、微任务(1个)三、Promise 的构造函数四、process.nextTick在事件循环中的处理五、vue nextTick原理 一、概念 event: 事件 loop: 循环,循环…

汉语语音基本特性

发音的生理基础和过程 人的发音生理机构如图 2.3.1所示,发音时由肺部收缩送出一股直流空气,经气管流至喉头声门处(声门即声带开口处),在发声之初,声门处的声带肌肉收缩,声带并拢间隙小于 1mm,这股直流空气冲过很小的缝隙,使声带得到横向和纵向的速度,此时,声带向两边运动,缝隙…

蓝桥杯真题:数字三角形

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代码...int nscan.nextInt();//输入行数nint[][] arr new int[n1][n1];//存储数…

二叉树 - 栈 - 计数 - leetcode 331. 验证二叉树的前序序列化 | 中等难度

题目 - 点击直达 leetcode 331. 验证二叉树的前序序列化 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理方法1:栈方法2:计数 3. 时间复杂度 3. 代码实现方法1:栈方法2:计数 leetcode 331. 验证二…

STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天原理解析)

STM32 第六天 一、 USART 1、USART概念 USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器 USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备 处理器与外部设备通信的两种方式: u并行通信(…

为“自研”的KV数据库编写JDBC驱动

一觉醒来,受到梦的启发,自研了一套K/V数据库系统,因为"客户"一直催促我提供数据库的JDBC驱动,无奈之下,只好花费一个上午的时间为用户编写一个。 我们知道,JDBC只定义一系列的接口, 具体的实现需…