
JVM
文章平均质量分 86
初栀_
这个作者很懒,什么都没留下…
展开
-
G1垃圾收集器详解
内存模型G1是基于Region的堆内存布局实现的,把连续的Java堆划分为多个大小相等的独立区域(Region),每一个Region都可以根据需要,扮演新生代的Eden空间,Survivor空间,或者老年代空间。收集器能够对扮演不同角色的Region采用不同的策略去处理,这样可以使不同状态的对象都能获取很好的收集效果Region中存在特殊的Humongous区域,用来存储大对象。G1认为只要大小超过了Region容量一半的对象即可判定为大对象,G1的大多数行为都把Humongous Region作为老年原创 2021-06-27 14:28:00 · 362 阅读 · 0 评论 -
JVM运行时数据区域
运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用于线程的启动和结束而建立和销毁Java虚拟机所管理的内存包括以下几个运行时数据区域程序计时器程序计数器是一块较小的内存空间,它可以当作是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下调需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、原创 2021-06-27 10:31:21 · 172 阅读 · 0 评论 -
JVM垃圾收集器之CMS
简介CMS(Concurrent Mark Sweep)收集器是以获取最短回收停顿时间为目标,适合Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上。是基于标记-清除算法实现的。运行过程整个过程分为四个步骤:初始标记并发标记重新标记并发清除其中初始标记、重新标记这两个步骤需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接引用到的对象,速度很快;并发标记阶段就是GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长,不需要停原创 2021-06-24 17:07:17 · 146 阅读 · 0 评论 -
HotSpot的算法细节实现
一、根节点枚举我们可以通过可达性算法判断对象是否死亡,可达性算法的思路是GC Root集合的引用,而固定可作为GC Roots的节点主要在全局性的引用与执行上下文中,现在Java方法区的大小就常有数百上千兆,里面的类、常量等更是恒河沙数,如果逐个检查以这里为起源的引用肯定要消耗不少时间。注意:根节点枚举必须暂停用户线程OoPMap当用户线程停顿下来之后,其实并不需要一个不漏地检查完所有执行上下文和全局的引用位置,一旦类加载动作完成,HotSpot就会把对象内什么偏移量上是什么类型的数据计算出来,原创 2021-06-24 10:03:25 · 210 阅读 · 0 评论 -
垃圾收集算法
垃圾收集算法使用垃圾收集,首先需要了解Java中的哪些东西属于垃圾从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。因为引用计数式垃圾收集算法在主流Java虚拟机中均为涉及,所以以下算法均属于追踪式垃圾收集的范畴一、分代收集理论当前商业虚拟机的垃圾收集器,大多都遵循了“分代收集”的理论进行设计,它建立在两个分代假说之上:弱分原创 2021-06-21 18:27:01 · 106 阅读 · 0 评论 -
jvm如何判断对象是否死亡?
一、对垃圾收集的思考垃圾收集并不是Java语言的伴生产物,实际上,垃圾收集的历史远远比Java久远,在1960年诞生于麻省理工的Lisp是第一门开始使用内存动态分配和垃圾收集技术的语言。当Lisp还是胚胎时期时,其作者John McCarthy就思考过垃圾收集需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收虽然今天的内存动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,但当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须原创 2021-06-17 11:27:53 · 303 阅读 · 0 评论