理解JVM GC
理解JVM GC对于我们把控Java应用有很大的帮助。下面我从运维角度,把网上的JVM相关的资料整理如下,以加深对JVM GC的理解。
如有错误的地方,请看官指正。
JVM内存使用分类
JVM的内存分区关系:
- 【JVM整个堆内存】=年轻代+年老代
- 【JVM整个内存】= (堆内存) + 非堆内存 = (年轻代 + 年老代) + 持久代
关于年轻代、年老代、持久代
对于JVM来说,内存分为三个区域:年轻代、年老代和持久代。年轻代和年老代用来存放Java进程中的变量,持久代用于放Java类信息。
一般对我们主要关注年轻代和年老代。JVM的分代可以用下面这张图表示:
年轻代分为三个区域:一个Eden区(简称E区域),两个Survivor区(我们定义为S0、S1)。
Java程序新申请的变量会放在E区;当E区满时,所有存活的对象会被移动到S0区。当S0区满时,S0中存活的对象被移动到S1区(这时候S0就空了,E区满时存活的对象会移动到S1区)。当S1区满时,将经历过S0的对象移动到年老代(O区)。S0区和S1区是对等的,这样一个对象要进入持久代会经历E区、S0区、S1区,然后进入到O区。
年老代用于存放从年轻代晋升上来的对象(E区->S0区->S1区->O区),一般我们设置的时候年老大比较大。
使用jstat查看当前Java进程JVM各区的情况
使用方法
jstat -gcutil 进程pid 刷新秒s
举例
[hadoop@localhost ~]$ jstat -gcutil 6572 1s
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
0.00 0.13 10.61 60.38 63.44 249 117.204 2 1.468 118.673
这里可以看到S0、S1、E、O区各个使用率情况,另外还有gc的次数统计
年轻代和年老代的 GC 关系
由于JVM的内存有限,而Java应用程序不会管理不用的内存,所以JVM需要一种垃圾回收机制(Garbage Collection),这就是JVM GC机制。
目前常见的GC收集器的概况如下:
内存区 | GC算法 | 是否多线程 | 是否stop-the-world |
年轻代 | Serial | 单线程 | 是 |
年轻代 | ParNew | 多线程 | 是 |
年轻代 | Parallel Scavenge | 多线程 | 是 |
年老代 | CMS | 多线程 | 整个过程有2次短暂stop-the-world |
年老代 | Serial Old(MSC) | 单线程 | 是 |
年老代 | Parallel Old | 多线程 | unkown |
年轻代和年老代都有各自的垃圾回收机制。并且在我们实际使用的时候,是相互搭配的,具体搭配关系见下图:
理解JVM GC的更多相关文章
- JVM相关 - 深入理解 System.gc()
本文基于 Java 17-ea,但是相关设计在 Java 11 之后是大致一样的 我们经常在面试中询问 System.gc() 究竟会不会立刻触发 Full GC,网上也有很多人给出了答案,但是这些答 ...
- 深入理解JVM+G1+GC.pdf (中文版带书签)
目录 序 VII前言 IX 第1章 JVM & GC基础知识 11.1 引言 21.2 基本术语 31.2.1 Java相关术语 41.2.2 JVM/GC通用术语 241.2.3 G1涉及术 ...
- 如何避免后台IO高负载造成的长时间JVM GC停顿(转)
译者著:其实本文的中心意思非常简单,没有耐心的读者建议直接拉到最后看结论部分,有兴趣的读者可以详细阅读一下. 原文发表于Linkedin Engineering,作者 Zhenyun Zhuang是L ...
- 【转】深入理解Major GC, Full GC, CMS
声明:本文转自http://blog.csdn.net/iter_zc/article/details/41825395,转载务必声明. 很多人都分不清Major GC, Full GC的概念,事实上 ...
- 深入理解JVM垃圾收集机制(JDK1.8)
垃圾收集算法 标记-清除算法 最基础的收集算法是"标记-清除"(Mark-Sweep)算法,分两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象. 不足: ...
- 【转载】Java性能优化之JVM GC(垃圾回收机制)
文章来源:https://zhuanlan.zhihu.com/p/25539690 Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我 ...
- 深入理解Major GC, Full GC, CMS
很多人都分不清Major GC, Full GC的概念,事实上我查了下资料,也没有查到非常精确的Major GC和Full GC的概念定义.分不清这两个概念可能就会对这个问题疑惑:Full GC会引起 ...
- 走进JVM【二】理解JVM内存区域
引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...
- Java性能优化之JVM GC(垃圾回收机制)
Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.st ...
随机推荐
- python 微信撤回消息
import itchatfrom itchat.content import *import osimport reimport time# 文件临时存储页rec_tmp_dir = os.path ...
- 关于UGUI不拦截射线的方法
起因:开发游戏,要在设置界面里给一个设置项添加一个东西解释这个项是干啥的,要求鼠标移到文字上的时候显示一个弹窗差不多的东西,见动图,鼠标移开会消失.但是当我移动鼠标到弹窗上的时候,UGUI会发射一根射 ...
- eclipse中设置项目的编码方式
1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text file encoding ...
- metasploit学习之情报搜集
3.1.被动信息搜集whois查询Netcraft nslookup>set type=mx>testfire.net Google Hacking 3.2 主动信息搜集 使用nmap进行 ...
- Linux内核分析作业二
贾瑗 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.操作系统是如 ...
- js生成uuid代码
function uuid() { var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 3 ...
- Leetcode——37.解数独 [##]
@author: ZZQ @software: PyCharm @file: leetcode37_solveSudoku.py @time: 2018/11/20 16:41 思路:递归回溯 首先, ...
- “吃神么,买神么”的第一个Sprint计划(结束)
“吃神么,买神么”项目Sprint计划 ——5.28 星期四(第八天)第一次Spring计划结束 第一阶段Spring的目标以及完成情况: 时间:5月21号~5月28号(7天) 目标:第一阶段结 ...
- 第二个Sprint计划
第一个Sprint计划已完成基本框架,接着第二个计划 时间:5月30-6月3日 目标:能够将各个框架连接起来,实现基本功能,并查看数据库连接. 分工:杜殷浩:查看数据库连接,创建数据库. 何广强:实现 ...
- SpringMVC(五)-- springmvc的系统学习之拦截器
资源:尚学堂 邹波 springmvc框架视频 一.拦截器简介 使用拦截器时, (1)实现HandlerInterceptor (2)在springmvc配置文件中配置以下信息 <mvc:int ...