GC基础知识

news2024/9/25 9:32:37

1.什么是垃圾

c语言申请内存  malloc  释放内存 free

c++: new delete

java: new

自动内存回收 优点:编程上简单,手动释放内存,容易出两种类型的问题:

        1.忘记回收

        2多次回收

jvm的调优呢,主要就是集中在垃圾回收机制的选择和参数设置

 

 定义:没有任何引用执行那个的一个对象或者多个对象(循环引用)

2.如何定位垃圾

  1. 引用计数    但是无法循环引用的垃圾,就是一堆垃圾
  2. 根可达算法  Java虚拟机中就是采用这种方式  

                        

理解 GC roots包含的变量。通过根找不到的对象就是垃圾

3.常见的垃圾回收算法

  • Mark-Sweep(标记清除) 位置不连续,产生碎片

        就是找到垃圾,把他标记成非垃圾区域        

  • Copying(拷贝)

        

 把内存分成两半,只用其中一般,当垃圾回收的时候,我们把存活的对象拷贝到另一半如上图所示。再把上边那块全部清掉,下边的清垃圾了,就考到上边,然后下边全清空,来回重复。

快,但是浪费空间

  • Mark-Compact(标记压缩)

 再回收的时候,将后边的存活的对象,依次填充到前边未使用或者可回收的磁盘块中,做一个整理,如上图。

可是这个效率比copy低。没有碎片。任何一块挪动都要进行线程同步

4.jvm内存分代模型(用于分代垃圾回收算法)

1.在部分垃圾回收器,会把jvm分成各种代,也就是不同的区域。(部分)

比较新的垃圾回收器,他就不使用代,比如说G1

->2. 新生代+老年代+永久代(1.7)/元数据区(1.8)Metaspace

  •  永久代 和 元数据  装class对象的
  •  永久代必须指定大小限制(将来会出现限制),元数据区可以设,也可以不设置,无上限(受限于物理内存)
  • 字符串常量 1.7 存在永久代  1.8 在堆里
  • 元数据区,jvm都不去管他了,它受限于操作系统。永久代1.7 好像是在堆里
  • MethodArea 是一个逻辑概念,在永久代 或 元数据区

 

3. 运行时

上边数字就是每个区的比。了解每个区是怎么使得呢,我们就需要知道一个对象产生得过程。

当我们new一个对象,默认去eden去找空间,如果盛不开,直接去老年代。两个survivor 便于垃圾回收(YGC回收之后,大多数的对象都会被清楚),在新生代这生曾的对象,很容易回收。比如for循环中的对象。用copy算法,将eden区的活着的对象考到第一个survivor区,然后eden区清空。再次YGC之后,第一个survivor区和eden区的活着的对象考到第二个survivor区。再次YGC

把第二个sur。。区和eden 整到第一个sur区,清空。然后反复。如果survivor区的有那麽几个一直不被回收,直接进入老年代,成不来了也进入老年代。老年代就是兜底的

老年代满了就会触发Full GC(FGC),老年代就是就是装顽固分子的。

我们GC调优就是 减少FGC

FULL GC 就是新生代和老年代一起 进行回收的。

两个概念

MinorGC = YGC  年轻代垃圾回收

MajorGC = FGC

5 常见的垃圾回收器

10种垃圾回收器

 图的说明

在中间的是不在用新生代和老年代了。上边就是用在新生代,下半部分就是用在老年代的。

 待解G1。。只了解了分带模型

Serial()是新生代的垃圾回收器,垃圾回收时 停止所有线程,开始垃圾回收 单线程垃圾回收。卡顿是你程序卡顿了,可不是你的cpu,cpu永远有活干

 ps 并行回收

 parnew适合cms配合使用的,为了配合cms 在ps设计了parnew

 

 

 

 

 cms 简单来说是在回收时不用 停止应用程序 不用stop the word

 

 

 

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

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

相关文章

修改conda环境缓存默认路径

前言:conda环境占用的内存太大了,每次建立一个新的虚拟环境都要加5个G差不多。所以想要修改默认的路径 问题1:找不到.condarc文件夹 创建condarc文件命令 conda config --add channels r 修改conda环境缓存默认路径 打开.condarc 添加 en…

Softmax函数个人解读

1 什么是Softmax? S o f t m a x s o f t m a x Softmaxsoft max Softmaxsoftmax,其中 m a x max max就是求最大值的意思,其核心是soft,在英文中soft有软的意思。与之相对应的hardmax,也就是说的在实际中经常求得最大值&#…

【并发专题】手写LinkedBlockingQueue

分析 LinkedBlockingQueue有如下特点: 近乎无界队列,但可以是有界队列实现了BlockingQueue接口需要实现take方法和put方法,实现阻塞效果数据结构是单链表,有head跟last指针来进行入队出队操作有两把锁,读写分离所以也…

linux-MySQL的数据目录

总结: window中的my.ini linux 中 /etc/my.cnfwindow中的D:\soft\mysql-5.7.35-winx64\data linux 中 /var/lib/mysql 1.查找与mysql有关的目录 find / -name mysql [rootVM-4-6-centos etc]# find / -name mysql /opt/mysql /etc/selinux/targeted/tmp/modul…

【Linux命令200例】patch 用于将补丁文件应用到源码中

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…

glide加载content://com.android.contacts图片源码粗略梳理

获取链路是这样的; UriLoader类里定义了协议头: 里面有个内部类StreamFactory: 通过StreamLocalUriFetcher类的loadResource方法获取InputStream然后把流转换成为图片; 在这里作个草稿笔记给自己看

分布式事务之CAP理论和BASE理论详解

🚀 分布式事务 🚀 🌲 AI工具、AI绘图、AI专栏 🍀 🌲 如果你想学到最前沿、最火爆的技术,赶快加入吧✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆&…

PHP8的变量-PHP8知识详解

昨天我们讲解了PHP8的常量,今天讲解PHP8的变量。常量有定义常量和预定义常量,变量呢?那就没有定义变量了,那叫给变量赋值,但是还是有预定义变量的。下面就给大家讲解什么是变量、变量赋值及使用及预定义变量。 一、什么…

SE-Net注意力机制

📌本次任务:了解SE-Net原理 SE-Net 是 ImageNet 2017(ImageNet 收官赛)的冠军模型,是由WMW团队发布。具有复杂度低,参数少和计算量小的优点。且SENet 思路很简单,很容易扩展到已有网络结构如 Inception 和 ResNet 中。(这篇论文是2019年的,应该是后续做了更新) 一…

CodeGeeX2 模型全新上线,编程助手能力全面升级!

第二代CodeGeeX代码生成模型CodeGeeX2-6B已于近日发布,并在CodeGeeX编程助手插件上全面上线。新模型基于 ChatGLM2-6B 架构加入代码预训练实现,精度更高、速度更快、能力更强。 下面我们一起来看一下新版模型给CodeGeeX编程助手带来的变化吧:…

C# Blazor 学习笔记(4):blazor代码分离

文章目录 前言代码分离 前言 Blazor可以支持在razor文件里面添加cs代码,但是代码一旦复杂了之后就会变得特别的麻烦。但是VS提供了代码分组的功能。 分离前 分离后 代码分离 我们直接右键razor组件是不能直接添加cs代码部分的 注意新建类的类名是xxx.razor…

安全加固服务器

根据以下的内容来加固一台Linux服务器的安全。 首先是限制连续密码错误的登录次数,由于RHEL8之后都不再使用pam_tally.so和pam_tally2.so,而是pam_faillock.so 首先进入/usr/lib64/security/中查看有什么模块,确认有pam_faillock.so 因为只…

【虚拟数字人】SadTalker简易部署教程

视频教程在这里: sadtalker数字人创建简易教程 项目基于SadTalkers实现视频唇形合成的Wav2lip。通过以视频文件方式进行语音驱动生成唇形,设置面部区域可配置的增强方式进行合成唇形(人脸)区域画面增强,提高生成唇形的…

【MySQL】数据库基础和SQL分类

文章目录 MySQL数据库基础 数据库的概念主流数据库基本使用连接服务器服务器管理数据库服务器,数据库,表关系 MySQL架构 SQL分类存储引擎查看存储引擎 MySQL数据库基础 数据库的概念 数据库是按照数据结构来组织、存储和管理数据的仓库,…

mysql--InnoDB存储引擎--架构和事务

MySQL进阶篇 文章目录 架构1、逻辑结构InnoDB 逻辑存储单元主层级关系图:1、表空间2、段3、区4、页5、行总结: 2、架构2、1 内存架构2、2 磁盘架构 3、事务3、1事务基础(1)事务(2)特性 架构 1、逻辑结构 I…

青少年软件编程(Python) 等级考试试卷(六级)2023年5月

青少年软件编程(Python) 等级考试试卷(六级) 分数: 100 题数: 38 一、 单选题(共 25 题, 共 50 分) 1.明明每天坚持背英语单词, 他建立了英语单词错题本文件“mistakes. txt” &…

PPT文件常见的几种格式有哪些?

PPT文件大家都不陌生,那么PPT文件的几种格式,大家也可以学习一下: .ppt & .pptx 这两种PPT格式是最基本的ppt文件后缀,就是我们普通可以编辑的PPT文件格式,2003版的PowerPoint的文件格式是.ppt,而在0…

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)

author:&Carlton tag:C topic:【C】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次”) website:黑马程序员C date:2023年7月31日 目录 文本文件 写文件 源…

二叉搜索树的模拟实现

基础的二叉树用的其实不多,二叉树的重点在二叉树的延伸:二叉搜索树。二叉搜索树又延伸出了平衡二叉搜索树。搜索数的特点是:查找效率极高。 二叉搜索树的作用: 1. map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一…

3节点linux服务器集群搭建

一,目的 由于当前集群部署已经成为主流,适当研究一些集群部署的基本操作,有助于后续像k8s集群、doris集群的部署。 大部分集群都是一主两从这种三节点配置。故本文也是采用三节点完成相关学习和记录。 二,说明 因为会关闭防火…