JVM GC

JVM 中Minor GC、Major GC、Full GC 的区别? Minor GC、Major GC 和 Full GC 是 Java 虚拟机 (JVM) 垃圾回收 (Garbage Collection) 中的不同类型的 GC 事件,它们在范围、触发条件、停顿时间等方面有所不同。 阅读详情

1. 堆内存分配

老年代2/3, 新生代1/3。其中,新生代可以分为1个eden区及2个servival区(from和to,各占新生代的1/10, 并且始终有一个区域空闲,轮流使用)

2. 存放对象

新生代:短期小对象直接存放于新生代中, 经过MinorGC,会将使用中的对象存放到其中一块servival中。多次MinorGC(默认15次,参数 -XX:MaxTenuringThreshold 可以来设定 )后仍然存活的对象进入老年代中;

老年代:1. 新生代中迭代过后存活的对象; 2. 大对象跳过新生代直接存入老年代。

jstat -gcutil 236 1000 //236为pid, 1000为打印间隔单位ms

S0、S1:两个servival区

E:新生代百分比

O:老年代百分比

M:元数据区使用比例

CCS:压缩使用比例

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

更多jstat命令及参数,参考:jstat命令查看jvm的GC情况 (以Linux为例)_ITPUB博客

3. 堆回收gc

GC分为MinorGC和FullGC(MajorGC)。MinorGC为新生代GC,特点:频繁,回收速度快;FullGC为老年代GC,回收时间较MinorGC相比也多很多(参看下图),并且伴随长时间卡顿(可达性分析会导致所有Java线程停顿),同时发生FullGC的同时一般也会伴随一次MinorGC。

4. 引用判定方法

a. 引用计数算法

对象引用计数+1, 引用失效计数-1;缺点:相互引用的时候无法回收。

b. 可达性分析算法(主流商用语言Java,C#)

GcRoots到一个对象无引用链的时候,视为不可达。

GcRoot节点主要包括:

1). 虚拟机栈中的对象

2). 方法去中静态属性引用对象

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

4). 本地方法栈中native方法引用的对象

5. 方法区回收

方法区中存放很多常量,在常量(如String a = “abc”)没有引用的时候,会将方法区常量池中的该常量回收。

6. 垃圾收集算法

a. 标记-清除:标记处所有待回收对象并进行统一清除(缺点:效率低、内存碎片多);

b. 复制:内存一分为二,每次回收将存活对象拷贝到另一半中依次存放(缺点:每次只能使用一半内存。新生代中垃圾回收使用该方法。eden80%, from和to各占10%的空间,当10%不够存放80%的eden区域的存活对象时会放入老年代中);

c. 标记-整理:(老年代gc算法)标记所有待回收对象,将存活对象向一端移动,清理掉边界以外的内存;

d. 分代收集:当前商用虚拟机对堆的新生代和老年代采用不同的垃圾收集算法。新生代每次垃圾收集时大量对象需要被清除,采用复制算法进行垃圾清理;老年代中对象存活率高,采用标记-清除或者标记-整理算法进行回收。

7. 垃圾收集器

各收集器详情:垃圾收集器_pp_lan的博客-优快云博客

触发JVM进行Full GC的情况及应对策略 Full GC又称作Major GC,属于老年代GC,指发生在老年代的GC,相对这种GC的有新生代GC即Minor GC。出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的,Major GC的速度一般会比Minor GC慢10倍以上。下边看看有那种情况触发JVM进行Full GC及应对策略。   1、System.gc()方法的调用   此方法的调用是建议JVM进行Fu 阅读详情

相关推荐

JVM的GC策略

1 前言      GC(Garbage Collect)是jvm对于内存管理的核心功能,正是因为它才让java程序员从内存释放的苦海中脱离出来,所以作为一个程序员都有必要去了解一下他的原理。        说一句题外话,我曾经被问到GC的具体实现,那个时候我就知道一些基本的思想,结果被人鄙视了。对于这个问题我到现在仍保留个人观点,就算java用了很久,如果不涉及到java程序的性能调

一个人的博客 6262

JVM学习之GC流程和GC策略

新生代可用GC策略 串行GC 并行回收GC STW:在年轻代使用并行GC处理的时候,会产生一个“STW”暂停,在进行对象 回收的时候所有其他线程将被暂时性挂起。 并行GC 老年代可用GC策略 串行GC 并行GC 并发GC GC策略参数调整: 观察GC策略 一、默认策略 java String str = "showGCStrategy"; while (tr...

酸奶灬的博客 8563

聊聊JVM(一)相对全面的GC总结

最近时间比较紧张,要写的东西也有很多,只能想到一点写一点。关于GC,网上的资料太多,之前对一个系统调优的时候又回顾了一下,找了几篇广泛流传的资料,大部分都是大同小异,这里总个总结,希望能够做个相对的全集,并写出一些新的点,比如Card Marking(卡片标记)等。 首先是大家都要提到的GC的基础算法:标记清除,标记整理,复制,分代。这些算法的第一步都是做的一件事: 标记(Mark)。

ITer_ZC的专栏 1万+

JVM 如何分析 GC 日志,定位 GC 性能问题?

分析 GC 日志是 JVM 调优的重要环节。通过分析 GC 日志,可以了解 JVM 的内存使用情况、GC 的频率、停顿时间、回收效率等,从而找出潜在的性能问题,并进行相应的优化。

专注于技术分享 1778

jvm性能调优 - 22JVM GC回顾

前面二十几篇分析了JVM的核心运行原理,还有JVM GC的工作原理 同时,结合案例分析了JVM什么情况下会出现GC的问题,平时我们说优化JVM,到底是在说优化JVM的什么东西 。 这里我们来总结一下

小工匠 2万+

JVM的三种常见GC:Minor GC、Major GC与Full GC

其实不分代完全可以,分代的唯一理由就是优化GC性能,如果没有分代,那所有的对象都在一个区域,当需要进行GC的时候就需要把所有的对象都进行遍历,GC的时候会暂停用户线程,那么这样的话,就非常消耗性能,然而大部分对象都是朝生夕死的,何不把活得久的朝生夕死的对象进行分代呢,这样的话,只需要对这些朝生夕死的对象进行回收就行了.总之,容易死的区域频繁回收,不容易死的区域减少回收.顾名思义,在新生代中,每次垃圾收集时都发现有大批对象死去,而每次回收后存活的少量对象,将会逐步晋升到老年代中存放。...

流楚丶格念的博客 1万+

JVM查看GC日志

一、如何打印出JVM GC日志 需要在系统的JVM参数中加入GC日志的打印选型,jvm参数如下所示: -XX:NewSize=5242880 -XX:MaxNewSize=5242880 -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=10485760 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+Print

cristianoxm的博客 5700

从硬件异常到代码救赎:RH850内存访问错误(MAE)的深层诊断与艺术

本文深入探讨瑞萨RH850微控制器的内存访问错误(MAE)诊断与解决方法。针对程序跑飞和Flash Driver交互中的潜在陷阱,提供系统性硬件异常分析框架和防御性编程实践,帮助嵌入式开发者从底层机制到代码层面有效预防和修复MAE问题,提升系统稳定性。

pytorch8learner的博客 197

JVM GC 机制笔记

当触发 GC 时,先 Stop the world 将 GC Root 直接引用的对象都标记上,再继续运行用户线程,并行运行 GC 线程遍历出整个 GC Root 引用网络,遍历完后继续 STW,开启多线程纠正 GC Root 引用网络,因为在前一步遍历时可能会新增对象,所以需要纠正,纠正后继续开启用户线程,并行 GC 线程采用标记-整理算法回收垃圾,在并发清理时,需要判断区域是否满足最大 STW 停顿时间(优先回收垃圾占比高的区域),区域满足才进行清理,如果不满足则跳过。

weixin_51008312的博客 1187

Metal ECO实战:如何在不修改底层掩模的情况下修复芯片时序问题

本文深入探讨了Metal ECO技术在芯片设计中的应用,这是一种在不修改底层晶体管掩模的前提下,仅通过调整金属连线和替换预置填充单元来修复时序问题的“微创手术”。文章详细解析了其原理、适用场景、关键操作流程与命令,并分享了实战中的高级技巧与常见陷阱,为面临流片前时序违例的工程师提供了宝贵的修复指南。

wdx0123456的博客 431

数学概念 | 旋转矩阵、欧拉角、四元数

旋转矩阵、欧拉角、四元数概念及相关运算;

NapoleonCoder的博客 772

JVM中GC常用参数说明及理解GC日志

JVM中GC常用参数 参数 解释 -agentlib:ipharmacare_hook 公司指定文件:解析密钥需用到 -XX:MetaspaceSize=256m 元空间初始空间大小 -XX:MaxMetaspaceSize=512m 元空间 最大空间,默认是没有限制的。 -Xms1024m 设置JVM最大可用内存为1024M。 -Xmx1024m 设置JVM促使内...

olive 1880

IBTrACS v04r01 数据提取实战:Pandas 筛选 JTWC/CMA/JMA 3机构最佳路径数据

本文详细介绍了如何使用 Pandas 高效提取和处理 IBTrACS v04r01 数据集中的最佳路径数据,特别针对 JTWC、CMA 和 JMA 三家权威机构的数据进行对比分析。通过构建可复用的数据提取函数,解决多机构数据质量差异问题,并提供高级分析与可视化应用示例,助力热带气旋研究。

clijovtbq401783153的博客 517

JVM中GC原理解析

一、在理解GC之前,先了解下JVM体系结构   1.1什么是GC GC可以理解为在追踪仍然使用的所有对象,并将其余对象标记为垃圾然后进行回收,这样的一个过程称之为GC,所有的GC系统可以从如下几个方面进行实现 1.GC判断策略(例如引用计数,对象可达) 2.GC收集算法(标记清除法,标记清除整理法,标记复制清除法,分带法) 3.GC收集器(例如Serial,Parallel,CMS...

weixin_42415158的博客 7826

基于ABCDRez的激光谐振腔设计与热透镜效应仿真实践

本文详细介绍了如何利用ABCDRez代码包进行激光谐振腔设计与热透镜效应仿真。通过ABCD矩阵理论和高斯光束q参数,该工具能有效模拟热透镜动态变化对腔稳定性的影响,指导腔型优化与热补偿设计,是固体激光器预研与调试的高效辅助手段。

weixin_29093017的博客 290

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

JAVA中JVM一次 GC的 流程

JVM 的垃圾回收(GC)流程依赖于分代收集机制,不同区域(新生代、老年代)采用不同的回收策略。

xiaowangbadan0_0的博客 1362

JVM中GC的理解

GC(GarbageCollection)是垃圾回收机制,在Java中开发人员无法使用指针来自由的管理内存,GC是JVM对内存(实际上就是对象)进行管理的方式。GC使得Java开发人员摆脱了繁琐的内存管理工作,让程序的开发更有效率。

weixin_42308372的博客 1703

YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度

ASF-YOLO是一种基于YOLO的新颖框架,结合了空间和尺度特征以实现准确和快速的分割。其中,注意力尺度序列融合模块。

Limiiiing的博客 4391

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jvm gc问题总结

JVM 频繁 Minor GC 的原因和解决方案如下:以下是一些 JVM 频繁 Minor GC 的常见具体案例:JVM 频繁 Full GC 的原因和解决方案如下:以下是一些 JVM 频繁 Full GC 的常见具体案例:

AlbenXie的博客 766

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入解析JVM的GC过程

垃圾收集(GC)是指JVM自动回收不再被程序引用的对象所占用的内存空间。这一过程旨在释放无用的内存资源,从而避免内存泄漏和内存溢出问题。本文详细介绍了JVM的GC过程,包括GC的基本概念、各类垃圾收集器的工作原理、GC调优以及常见问题的解决方案。通过对GC机制的深入理解,程序员可以更好地优化Java应用的性能和稳定性。

良月柒 1510

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JVM GC与频繁GC

内容:1.JVM GC的内存管理2.频繁 GC 的原因。

m0_67402731的博客 1964

JVM优化之GC

JVM中的GC优化是一个复杂而关键的任务。通过深入理解GC的基本原理与算法、选择合适的垃圾回收器、调整堆内存大小与比例、启用GC日志与分析、优化代码与数据结构以及持续监控与调优等措施,可以显著提高Java应用程序的性能和稳定性。同时,也需要注意避免内存泄漏、平衡吞吐量与响应时间以及考虑硬件与操作系统差异等挑战。

vangoghlaam的博客 891

JVM GC 种类

JVM 中的垃圾回收器(GC)种类丰富,不同的 GC 在性能、延迟、吞吐方面各有优劣,适用于不同类型的应用程序场景。

怪味Coding 668

JVM GC策略

静态内存   在Java中静态内存分配是指在Java被编译时就已经能够确定需要的内存空间,当程序被加载时系统把内存一次性分配给它。这些内存不会在程序执行时发生变化,直到程序执行结束时内存才会被回收。在Java的类和方法中的局部变量包括原生数据类型和对象的引用都是静态分配内存的。静态内存空间实在Java栈上分配的,当方法运行结束时,对应的栈帧也就撤销了,所以分配的静态内存空间也就被回收了。 ...

lebron的博客 5140
上一篇: JVM内存模型
下一篇: java四种引用
pp_lan
博客等级 码龄10年 419粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值