![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 71
Young Yu°
有志者事竟成
展开
-
JVM-常见垃圾回收机制已经各自的特点
一.Serial和Serial Old垃圾回收器 分别用来回收新生代和老年代的垃圾对象。工作原理就是单线程运行,垃圾回收的时候会停止我们自己写的系统的其他工作线程,让我们系统直接卡死不动,然后让他们垃圾回收,这个现在一般写后台Java系统几乎不用。 二.ParNew和CMS垃圾回收器 ParNew现在一般都是用在新生代的垃圾回收器,CMS是用在老年代的垃圾回收器,他们都是多线程并发的机制,性能更好,现在一般是线上生产系统的标配组合。 G1垃圾回收器 统一收集新生代 和老年代,采用了更加优秀的算法和原创 2021-09-10 15:11:42 · 154 阅读 · 0 评论 -
JVM-内存溢出
可能发生内存溢出的区域 Metaspace区域 栈内存 堆内存 一.Metaspace区域 在jvm参数配置中通过以下参数分配限制大小 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m Metaspance区域内存溢出的主要两个原因: 第一种原因,上线系统Metaspace区域直接用默认的参数,即根本不设置其大小。这会导致默认的Metaspace区域可能才几十MB而已,此时对于一个稍微大型一点的系统,因为他自己有很多类,还依赖了很多..原创 2021-07-08 17:30:44 · 251 阅读 · 0 评论 -
JVM运行原理和GC原理
一.新生代gc 新生代分成了Eden和2个Survivor,默认比例是8:1:1。 当Eden内存存不下新对象时会触发Young GC; Young GC会采用复制算法,从GC Roots(方法的局部变量、类的静态变量)开始追踪,标记出来存活的对象。然后把存活对象都放入在第一个Survivor区域s0中。接着垃圾回收器就会直接回收掉Eden区里剩余的全部垃圾对象,在整个这个垃圾回收的过程中全程会进入Stop the Wold状态,也就是暂停系统工作线程,系统代码全部停止运行,不允许创建新的对象。..原创 2021-07-08 14:53:23 · 289 阅读 · 0 评论 -
JVM 优化问题整理
cms old gc 回收机制使用的是标记清理法 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 CMSFullGCsBeforeCompaction 设置为5则说明在5次old gc后才会进行内存碎片压缩,所以这样对导致在第一次或第二次之后产生大量的内存碎片,造成连续可使用空间过小,没办法存入新进入的完整对象,这时就容易造成频繁的进行old gc。 设置 XX:CMSFullGCsBeforeCom...原创 2021-07-07 16:19:06 · 214 阅读 · 0 评论 -
JVM-jmap和jhat使用介绍
这两个工具可以帮助我们观察线上JVM中的对象分布,了解到你的系统平时运行过程中,到底哪些对象占据了主角位置,他们占据了多少内存空间,让你对你的系统运行有更加细致的了解。 一.jmap 1. heap jmap -heap PID 会打印出来堆内存相关的一些参数设置,然后就是当前堆内存里的一些基本各个区域的情况 比如Eden区总容量、已经使用的容量、剩余的空间容量,两个Survivor区的总容量、已经使用的容量和剩余的空间容量,老年代的总容量、已经...原创 2021-07-05 15:21:18 · 312 阅读 · 0 评论 -
JVM-jstat使用及分析思路
一.jstat的命令使用 在window上找到jdk的安装路径在bin目录中打开win的cmd 通过jps命令查看本机jvm进程 通过 jstat -gc PID 查看Java进程(其实本质就是一个JVM)的内存和GC情况 各参数介绍: S0C:这是From Survivor区的大小 S1C:这是To Survivor区的大小 S0U:这是From Survivor区当前使用的内存大小 S1U:这是To Survivor区当前使用的内存大小 EC:这是Eden区的大小 EU:这是Ed..原创 2021-07-05 14:38:41 · 684 阅读 · 0 评论