JVM
lixiaoyi...
这个作者很懒,什么都没留下…
展开
-
jvm垃圾收集器对比、实现原理解析
Serial/Serial Old 收集器这是两款最基本的垃圾回收器,一般用于客户端模式下,适合单核或者配置较低的情况。Serial:新生代垃圾收集器,标记复制算法,单个垃圾收集线程,会产生Stop The WorldSerial Old:老年代垃圾收集器,标记-整理算法,单个垃圾收集线程,Stop The World,可作为CMS收集器并发失败时的后备预案Par New / Parallel Old 收集器相比于Serial/Serial Old,这两款垃圾收集器也很类似,主要区别是引.原创 2020-08-30 13:49:55 · 274 阅读 · 1 评论 -
白话垃圾回收算法
对于垃圾回收算法,大致可分为标记-清除算法、标记-复制算法、标记-整理算法。几乎所有垃圾收集器都或多或少包含着这些算法思想。在讲解这三种算法之前,必须得说说分代收集理论--大致就是将一些朝生夕灭的对象划分在一个区域(新生代),将一些存活时间较长的对象换分在另一个区域(老年代),然后不同的区域采用更适合其特点的垃圾回收算法和垃圾收集器。从而达到缩短垃圾收集时间,提高吞吐量等目的。标记-清除算法这算是一种最基本的垃圾回收算法了,思想也很简单,就是先对对象做标记(至于如何标记,可以看下前面可达性分析算法这篇原创 2020-08-29 16:12:02 · 205 阅读 · 0 评论 -
可达性分析详解
谈到垃圾回收,就不得不说如何判断一个对象是不是垃圾?是否可以在本次收集活动中清理掉?所以就需要一种算法来判断一个对象是应该生存还是死亡。目前主要有两种算法,一种是引用计数法(python语言采用此算法),另一种就是这里要讲的可达性分析算法(java,c#等语言)主要思路 可达性分析算法的主要思路是先找出一批根节点对象集合作为GC Roots(可称为根节点枚举),然后从这批根节点出发,查找其引用关系(类似于深度优先搜索),最终形成如下图这样的反映对象间依赖关系的图,若某些对象没有任何引用链与GC Root原创 2020-08-29 14:55:10 · 8507 阅读 · 0 评论 -
JVM 内存区域(JAVA运行时数据区)
根据《java虚拟机规范》,java虚拟机所管理的内存区域如下图所示:线程共享的内存区域,存储的是对象的实例。从回收内存的角度看,由于大部分的垃圾回收器都是基于分代回收理论进行垃圾回收的,所以可以将其分为新生代,老年代…等。但现在hotspot里面也出现了很多不采用分代回收的新垃圾回收器,所以上述划分仅针对经典的基于分代回收的垃圾回收器从分配内存的角度看,所有线程共享的对可划分为多个线程私有的分配缓冲区,用来提升对象分配是的效率方法区线程共享的内存区域,用于存储已被虚拟机加载的类型信息、常量原创 2020-08-28 23:40:37 · 175 阅读 · 0 评论