
jvm
Coder_Ring
这个作者很懒,什么都没留下…
展开
-
【深入学习JVM 01】运行时数据区域划分
前言 在使用c++进行编程时,我们通过new创建的每一个对象都需要有对应的delete操作去释放对象所占用的内存,对内存的掌控度比较高,但是程序员需要知道对象什么时候不需要使用了,并需要手动释放内存,如果忘记了delete释放,很容易出现内存泄漏(申请内存后,没有释放,会一直占用着)和内存溢出(因为过多的内存泄漏导致无法申请足够的内存,即out of memory)的问题。 相比之下,java...原创 2018-08-27 00:25:26 · 198 阅读 · 0 评论 -
【深入学习JVM 02】HotSpot虚拟机对象探秘
虚拟机运行时数据区域描述了虚拟机管理的内存划分情况,但是目前我们对于虚拟机还是有很多困惑,比如: 问题1:如何为对象分配内存? 问题2:对象内存模型是怎样的? 问题3:是怎样访问内存中的对象的? 问题4:分配内存的时候如果遇到并发问题,怎么保证分配操作的线程安全性? 为了搞清楚这些问题,我们先从虚拟机是如何创建对象开始讲起。 一、对象创建过程 当虚拟机遇到一条new 指令时,便会进...原创 2018-08-27 16:12:27 · 179 阅读 · 0 评论 -
【深入学习JVM 03】判断一个对象是否可回收
我们知道,虚拟机判断一个对象是否“已死”,是判断对象是否还有引用指向它。而虚拟机又是如何判断是否有引用指向对象呢? 目前,判断对象是否存活的算法有两种: 引用计数算法 可达性分析算法 一、引用计数算法 每个对象都有一个计数器,当这个对象被一个变量引用或者被另一个对象引用时,计数器值就加一,当引用失效时,计数器值就减1,当计数器为0时,则对象不可能再被使用,需要被回收。 二、可...原创 2018-08-27 20:55:40 · 158 阅读 · 0 评论 -
【深入学习JVM 04】回收“已死”对象的过程
上篇文章讲到,虚拟机判断一个对象是否可回收是根据“可达性分析”,不可达的对象就是可回收的对象,但是被判定为“不可达的对象”也并非“非死不可”。它们只是被判了“缓刑”,最后是死是生都有可能。 我们看看回收无效对象的过程: 1.对象经过可达性分析后,发现没有被GC Roots关联,则会被第一次标记。 2.判断对象是否覆盖了finalize方法。 如果覆盖了该方法,并且该对象的finalize...原创 2018-08-27 21:54:32 · 222 阅读 · 0 评论