![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 83
主要记录一些学习JVM的笔记
蓝桉不遇释怀
努力修行, 超越自己;不忘初心,不负韶华。
展开
-
当“对象”是垃圾时,如何回收,快学习垃圾收集算法
分代收集理论 目前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”的理论进行设计,分代收集理论都是建立在弱分代假说(Weak Generational Hypothesis)和强分代假说(Strong Generational Hypothesis) 弱分代假说:绝大多数对象都是朝生夕灭的。 强分代假说:熬过越多次数垃圾收集过程的对象就越难以消亡。 这两个假说共同奠定了多款常用的垃圾收集器的一致性的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄(对象熬过垃圾回收过程的次数)分原创 2021-04-08 16:03:43 · 12532 阅读 · 29 评论 -
想知道对象死没死?看这一篇就够了(引用计数算法、可达性分析算法)
如何判断对象已死 引用计数算法(Reference Counting) 在对象中添加一个引用计数器,每当一个地方引用它,计数器就加一;当引用失效时,计数器就减一;任何时刻计数器为零的对象就是不可能在被使用的。 客观的说,引用计数算法虽然占用了一些额外的内存空间来计数,原理简单,效率也很高,但是在Java领域,至少主流的Java虚拟机里面都没有选用引用计数法来进行内存管理,主要原因是,这个算法有很多例外要处理,比如对象之间相互循环引用解决起来就很麻烦。 import org.junit.Test; publ原创 2021-04-07 17:53:46 · 11632 阅读 · 57 评论 -
Java对象的创建、内存布局和访问定位
对象的创建 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析或初始化过。如果没有,那就先执行相应的类加载过程 指针碰撞:为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配的内存就仅仅是把指针向空闲方向挪动一段与对象大小相等的距离,这种分配方式原创 2021-04-06 17:37:42 · 10369 阅读 · 9 评论 -
Java内存区域
Java运行时数据区域 java虚拟机在执行java程序的过程中会把他所管理的内存划分位若干个不同的数据区域。这些区域各自有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动结束而建立销毁 。 程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器,在Java虚拟机的概念模型(“概念模型”它代表了所有虚拟机的统一外观,但各款具体的Java虚拟机并不一定要完全按照着这个概念模型的定义进行设计,可能会通过一些更高效率原创 2021-04-05 14:20:03 · 10109 阅读 · 7 评论