![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
对明天的期待丶
这个作者很懒,什么都没留下…
展开
-
JVM之方法区的回收
很多人都认为在方法区(或者HotSpot虚拟机中的永久代)中是没有垃圾回收的,Java虚拟机规范中确实说过可以不要求虚拟机在方法去实现垃圾回收,而且在方法区中垃圾回收的 “性价比” 一般是比较低的,因为方法区中的东西一般是不需要回收的,所以扫描一遍回收的很少。永久代的垃圾收集主要分为两部分内容:废弃常量和无用的类,回收废弃常量与回收Java堆中的对象特别类似,即当方法去中的常量没有被任何Str...原创 2018-12-07 17:10:24 · 386 阅读 · 0 评论 -
JVM之垃圾回收算法
标记清除算法最基础的收集算法是 “标记清除算法” ,如同他的名字一样,算法分为 “标记” 和 “清除” 两个阶段:首先标记出所需要回收的对象,在标记完成后统一回收所有被标记的对象。后续的算法都是在它的基础上进行的改进。他的不足之处如下:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量的不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较...原创 2018-12-08 09:53:29 · 186 阅读 · 0 评论 -
JAVA GC 判断对象是否已经消亡的两种算法
JAVA中的垃圾回收主要是针对堆的,因为虚拟机栈、程序计数器、本地方法栈三者会随着线程的建立而建立,随线程消亡而消亡,因为其最终都能分解为基本类型组成,因此在编译时大小基本可以确定,因此这几个区域的内存分配和回收都具有确定性,在这几个区域不需要过多的考虑回收的问题,因为在方法或者线程结束时,内存自然就回收了。但是Java堆不一样,例如一个接口的多个实现类需要的内存可能不一样,一个方法中的多个分支需...原创 2018-12-07 08:44:36 · 565 阅读 · 0 评论 -
JVM中的引用
在上一篇文章中,我们说到了判断对象是否消亡的两种算法,无论是引用计数算法还是可达性算法都离不开“引用”。在JDK1.2以前,Java中的引用的定义很传统,即如果reference类型的数据中存储的数值代表另一块内存的起始地址,就成这块内存代表着一个引用。这种定义很纯粹,但是太过狭隘,一个对象在这种定义下只有被引用或者没有引用这两种状态,对于描述一些“食之无味,弃之可惜”的对象就显得无能为力。因...原创 2018-12-07 09:52:33 · 204 阅读 · 0 评论 -
JVM——对象的内存分布
对象在内存中的存储可以分为三部分:对象头、实例数据、对其填充。对象头:对象头分为两部分,第一部分用于存储对象自身的运行时数据,如哈希码,GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID等,这部分数据的长度在32位和64位的虚拟机中(未开启压缩指针)分别为32bit和64bit。但是对象运行时需要存储的数据有很多,可能超出了对象头信息的最大存储,但是由于,对象头信息是与对象自身定义的数据...原创 2018-11-02 23:44:39 · 270 阅读 · 0 评论 -
JVM之运行时数据区域详解
1、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。虚拟机工作时就是通过改变改变计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 Java虚拟机多线程使通过轮流切换并分配处理器执行时间的方式实现,一个处理器(对于多核处理器来说就是一个...原创 2018-10-31 00:20:03 · 111 阅读 · 0 评论 -
什么时候JVM才真正将对象判定为“死亡”?
前边一篇文章详述了JVM判定对象何时需要进行回收,但是即使前边所说的算法判定对象该回收之后,他也并非是“非死不可”的,这时他暂时处于“缓刑”阶段,真正的宣告标记对象死亡至少要经历两次标记过程:如果对象没有任何与“GC Roots”相连的链,它将会被第一次标记,并且进行一次筛选,筛选的条件是对象是否有必要执行finalize()方法,当对象没有覆盖finalize()方法或者finalize()方法...原创 2018-12-07 16:17:05 · 195 阅读 · 0 评论 -
JVM安全点详解
1、安全点是什么?在虚拟机在进行可达性分析时,HotSpot虚拟机会在特定的位置记录在哪有引用,这些特定的位置就叫做安全点。2、安全点的作用是什么?上边已经说过了,在Oomap的帮助下,HotSpot虚拟机很快就完成了GC Roots枚举,但是我们不可能给每一个指令都声成对应的OoMap,那样会造成大量的内存浪费,安全点的作用就是来表示程序执行到安全点时,可以看作冻结状态,因此安全点选...原创 2019-06-09 19:17:43 · 5030 阅读 · 3 评论