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