![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
铁木匠
你可以不去做一个CTO,但是你依然应该拥有成为CTO的能力!
展开
-
JVM哪些区域会发生内存溢出
1、MetaSpace区域会发生内存溢出 第一种原因:上线的时候MetaSpace区域直接用默认的参数,即根本不设置其大小,这会导MetaSpace区域可能才几十M而已或者设置的比较小,此时对于一个稍微大型系统,因为他有很多自己的类,还依赖了很多外部jar包的类,MetaSpace空间很容易不够的。 第二种原因:就是很多人开发系统代码都会用一些cglib之类的技术动态生成一些类,一旦代码没有控制好,导致生成的类过多的时候,就很容易MetaSpace给塞满,进而引起内存溢出。2、每个线程...原创 2021-06-26 09:32:07 · 1398 阅读 · 0 评论 -
简单叙述下cms(标记-清除算法)垃圾回收器原理
初始标记:标记由4种(1:虚拟机(JVM)栈中引用对象 2:方法区中的类静态属性引用对象 3:方法区中常量引用的对象(final 的常量值) 4:本地方法栈JNI的引用对象)gc roots直接关键的对象;并发标记:对老年代所有的对象进行trace,看看是否能与GC Roots建立关系;最终标记:标记并发标记阶段引用变动的对象;并发清理:并发清理掉可回收的内存,但是因为与用户线程并行运行,所以每次Full GC都会清理不干净,产生浮动垃圾。...原创 2021-06-16 11:29:06 · 721 阅读 · 0 评论 -
搞定Java垃圾回收(一)
既然我们要做垃圾回收,首先我们得搞清楚垃圾的定义是什么,哪些是内存是需要回收的?1、引用计数算法 引用计数算法(Reachability Counting)是通过在对象头中分配一个空间来保存该对象被引用的次数(Reference Count)。如果该对象被其他对象引用,则它的引用计数加1,如果删除对该对象的引用,那么它的引用计数就减1,当该对象的引用计数为0时,那么该对象就会被回...原创 2019-07-20 13:47:39 · 139 阅读 · 0 评论 -
搞定Java垃圾回收(二)
1、可达性分析算法可达性分析算法(Reachability Analysis)的基本思路是,通过一些被称为引用链(GC Roots)的对象作为起点,从这些节点开始向下搜索,搜索走过的路径被称为Reference Chain,当一个对象到GC Roots没有任何引用链相连时(即从GC Roots节点到该节点不可达),则证明该对象是不可用的。如下图:通过可达性算法,成功解决了引用计数所无法...原创 2019-07-20 14:45:36 · 166 阅读 · 0 评论 -
搞定Java垃圾回收(三)
在确定了哪些垃圾可以被回收后,垃圾收集器要做的事情就是开始进行垃圾回收,但是这里面涉及到一个问题是:如何高效地进行垃圾回收?由于Java虚拟机规范并没有对如何实现垃圾收集器做出明确的规定,因此各个厂商的虚拟机可以采用不同的方式来实现垃圾收集器,这里我们讨论几种常见的垃圾收集算法的核心思想。1、标记-清除算法标记-清除算法(Mark-Sweep)是最基础的一种垃圾回收算...原创 2019-07-20 15:38:47 · 79 阅读 · 0 评论 -
搞定Java垃圾回收(四)
Java堆(Java Heap)是JVM所管理的内存中最大的一块,堆又是垃圾收集器管理的主要区域,这里我们主要分析一下Java堆的结构。Java堆主要分为2个区域,年轻代与老年代,其中年轻代又分Eden区和Survivor区,其中Survivor区域又分为From和to两个区。可能这时候大家会有疑问,为什么需要Survivor区,为什么Survivor还要分为2个区?请继续往下看!1...原创 2019-07-20 16:37:59 · 115 阅读 · 0 评论