JVM-GC-基础知识

JVM-GC-基础知识

前言

JVM中的GC使用Root Searching寻找垃圾单独方式,并结合mark-sweep、copying、mark-compact三种清除算法形成了各有特点的垃圾回收器,且垃圾回收器的演变过程是因为内存空间的不断增大的必然原因。

JVM-GC的发展史

JVM垃圾回收分为两个时代:一个是内存分代模型的垃圾回收器时代,一个是内存不分代回收器时代。

  1. 内存分代模型:将内存分为新生代、老年代,刚刚创建的对象优先向新生代分配,多少轮垃圾回收后没有被回收的对象放入老年代。
  2. 分代的原因:让经过好几轮垃圾回收没有被回收的对象减少扫描次数,提高回收效率。
  3. 年轻代使用copy算法(YGC):年轻代将内存分为三部分,eden(伊甸)、survivor1、survivor2,内存占比为8:1:1。在回收的时候先扫描eden区将剩下的对象放入到survivor1,然后再次扫描时候将eden区和survivor1同时扫描,扫描后剩下的对象放入survivor2,清除survivor1,下次就扫描eden和survivor2将剩下的对象放入survivor1,依次循环;
  4. 老年代使用make算法(FGC): 当老年代分区内存满后触发FGC,一般设置80%-90%的总内存触发GC

STW

全称stop the word,它表示在垃圾回收线程启动时,其他线程全部停止工作。

JVM的十种GC

分代时期的GC

分代时期的GC,基本是分为三组使用

Serial+Serial Old

这两种在JVM初期使用,内存空间较小,一般是几兆-几十兆,可以使用copying算法且单线程

  1. Serial:年轻代、STW、单线程、copying算法
  2. Serial Old:老年代、STW、单线程、mark-sweep-compact算法
Parallel Scavenge + Parallel Old

由于内存不断增大,一般是几十兆-1G,需要多线程清理垃圾。简称:PS+PO,是JDK1.8的默认垃圾回收器

  1. Parallel Scavenge: 年轻代、STW、多线程、make-sweep和copying算法
  2. Parallel Old: 老年代、STW、多线程 make-compact算法
PerNew + CMS

由于内存空间不断增大,一般1G-几十G,这是垃圾回收器的一个里程碑,使用concurrent sweep方式,并发清除,业务线程和GC线程可以同时运行。

  1. PerNew:年轻代、STW、多线程、copying垃圾回收器,是Parallel Scavenge垃圾回收器的升级用来配合CMS使用
  2. CMS(concurrent mark sweep):老年代、非STW、多线程、mark-sweep垃圾回收器,使用了著名的三色标记算法

分代时期的GC

G1、ZGC、Shenandoah、Epsilon,需要注意的是G1是逻辑分代,物理不分。

GC的实现算法

  1. CMS:三色标记算法 + 增量更新(incremental update)
  2. G1: 三色标记算法 + SATB(snapshot-at-the-beginning)
  3. ZGC:颜色指针 + 写屏障
  4. Shenandoah:颜色指针 + 读屏障

常见的垃圾回收器参数设定

#使用Serial + Serial Old
-XX:+UseSerialGC
#使用ParNew + Serial Old,不推荐使用
-XX:+UseParNewGC
#使用ParNew + CMS + Serial Old
-XX:+UseConcMarkSweepGC
#使用Parallel Scavenge + Parallel Old,这是jdk1.8默认垃圾回收器
-XX:+UseParalleGC
-XX:+UseParalleOldGC
#使用G1垃圾回收器,jdk1.9开始默认使用
-XX:+UseG1

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

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

相关文章

解释时间复杂度和空间复杂度的概念

在算法和数据结构的学习中,时间复杂度和空间复杂度是两个至关重要的概念。它们用于衡量算法在执行过程中所需要的时间和空间资源。下面我将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面来详细解释这两个概念。 一、技术难点 时间复杂度 定义与理解…

Python文本处理:初探《三国演义》

Python文本处理:初探《三国演义》 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计分析人物出场次数结果可视化完整代码 三国演义 《三国演义》是中国古代四大名著之一,它以东汉末年到晋朝统一之间的历史为背景,讲述了魏…

Mongodb使用$pop删除数组中的元素

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第67篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

使用PyTorch实现LSTM生成ai诗

最近学习torch的一个小demo。 什么是LSTM? 长短时记忆网络(Long Short-Term Memory,LSTM)是一种循环神经网络(RNN)的变体,旨在解决传统RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM引入了…

vue格网图

先看效果 再看代码 <n-gridv-elsex-gap"20":y-gap"20"cols"2 s:2 m:3 l:3 xl:3 2xl:4"responsive"screen" ><n-grid-itemv-for"(item,index) in newSongList":key"item.id"class"cursor-pointer …

C# OpenCvSharp Mat操作-创建Mat-ones

ones 函数用于创建一个全为“1”的矩阵&#xff08;Mat&#xff09;&#xff0c;可以用于各种图像处理和计算机视觉任务。下面我将详细解释每个重载版本的 ones 函数&#xff0c;并提供相应的示例代码。&#x1f4f8; 1️⃣ ones(int rows, int cols, int type) 这个重载函数…

VS - regsvr32.exe的官方工程

文章目录 VS - regsvr32.exe的官方工程概述笔记官方原版实现自己封装一个函数来干活(注册/反注册 COM DLL)END VS - regsvr32.exe的官方工程 概述 如果是要使用COM DLL&#xff0c; 必须先注册。 一般手工注册就要调用regsvr32.exe xx.dll 但是控制的不够细&#xff0c;且一般…

Spring学习笔记(九)简单的SSM框架整合

实验目的 掌握SSM框架整合。 实验环境 硬件&#xff1a;PC机 操作系统&#xff1a;Windows 开发工具&#xff1a;idea 实验内容 整合SSM框架。 实验步骤 搭建SSM环境&#xff1a;构建web项目&#xff0c;导入需要的jar包&#xff0c;通过单元测试测试各层框架搭建的正确…

IDEA 设置主题、背景图片、背景颜色

一、设置主题 1、点击菜单 File -> Settings : 点击 Settings 菜单 2、点击 Editor -> Color Scheme -> Scheme, 小哈的 IDEA 版本号为 2022.2.3 , 官方默认提供了 4 种主题&#xff1a; Classic Light &#xff08;经典白&#xff09; ;Darcula &#xff08;暗黑主…

知识普及:什么是边缘计算(Edge Computing)?

边缘计算是一种分布式计算架构&#xff0c;它将数据处理、存储和服务功能移近数据产生的边缘位置&#xff0c;即接近数据源和用户的位置&#xff0c;而不是依赖中心化的数据中心或云计算平台。边缘计算的核心思想是在靠近终端设备的位置进行数据处理&#xff0c;以降低延迟、减…

React组件通信方式总结

文章目录 父组件向子组件传递数据子组件向父组件传递数据兄弟组件传递数据祖先与后代组件之间的传值复杂关系的组件之间的传值使用发布-订阅模式使用 Redux 父组件向子组件传递数据 无论是类组件还是函数式组件&#xff0c;父组件向子组件传递数据的方式都是使用 props 来实现…

vue怎样获取dom元素?

在 Vue.js 中&#xff0c;直接操作 DOM 元素通常不是推荐的做法&#xff0c;因为 Vue 的核心思想是数据驱动视图&#xff0c;我们更倾向于通过改变数据来影响视图&#xff0c;而不是直接操作 DOM。 然而&#xff0c;在某些情况下&#xff0c;你可能确实需要直接获取和操作 DOM…

C++模板之模板成员函数不能偏特化

目录 1.引言 2.类模板成员函数的特化 2.1.没有函数特化的类模板 2.2.增加函数特化 3.“曲线救国”函数“偏特化” 3.1.函数重载实现“偏特化” 3.2.使用类型选择机制实现“偏特化” 4.总结 1.引言 C 泛型编程的资料在介绍类模板的特化和偏特化的时候&#xff0…

【HarmonyOS】HUAWEI DevEco Studio 下载地址汇总

目录 OpenHarmony 4.x Releases 4.1 Release4.0 Release OpenHarmony 3.x Releases 3.2.1 Release3.2 Release3.1.3 Release3.1.2 Release3.1.1 Release3.1 Release 说明 Full SDK&#xff1a;面向OEM厂商提供&#xff0c;包含了需要使用系统权限的系统接口。 Public SDK&am…

Python对Excel表格的操作

今天, 实现了一个对excel表格操作的技术方案. 操作的要求是: (1)在一个目标表格(表格2)中的第2列已经有唯一标识码.第1列为凭证号, 但是是空的. (2)在数据表格中(表格1)中有资产的信息, 其中第2列是资产的唯一标识码, 第1列是凭证号. (3)表格2内只有部分资产. 要求: 从表格1中…

前端:鼠标点击实现高亮特效

一、实现思路 获取鼠标点击位置 通过鼠标点击位置设置高亮裁剪动画 二、效果展示 三、按钮组件代码 <template><buttonclass"blueBut"click"clickHandler":style"{backgroundColor: clickBut ? rgb(31, 67, 117) : rgb(128, 128, 128),…

C# OpenCvSharp 图像处理函数-图像拼接-hconcat、vconcat、Stitcher

在图像处理和计算机视觉领域,图像拼接是一个常见的操作。OpenCvSharp是一个用于.NET平台的OpenCV封装库,可以方便地进行图像处理。本文将详细介绍如何使用OpenCvSharp中的hconcat、vconcat函数以及Stitcher类进行图像拼接,并通过具体示例帮助读者理解和掌握这些知识点。 函…

Java生成NetCDF文件

因为需要再Cesium中实现风场粒子效果&#xff0c;网上找了许多项目&#xff0c;大多是通过加载NC文件来进行渲染的&#xff0c;因此了解NC文件又成了一件重要的事。特此记录用java成果生成可在前端渲染&#xff0c;QGIS中正常渲染的NetCDF文件的相关代码&#xff08;有没详细整…

16. 第十六章 类和函数

16. 类和函数 现在我们已经知道如何创建新的类型, 下一步是编写接收用户定义的对象作为参数或者将其当作结果用户定义的函数. 本章我会展示函数式编程风格, 以及两个新的程序开发计划.本章的代码示例可以从↓下载. https://github.com/AllenDowney/ThinkPython2/blob/master/c…

java程序在运行过程各个内部结构的作用

一&#xff1a;内部结构 一个进程对应一个jvm实例&#xff0c;一个运行时数据区&#xff0c;又包含多个线程&#xff0c;这些线程共享了方法区和堆&#xff0c;每个线程包含了程序计数器、本地方法栈和虚拟机栈接下来我们通过一个示意图介绍一下这个空间。 如图所示,当一个hell…