摘要:
老年代TenuredGeneration所使用的垃圾回收算法是标记-压缩-清理算法。在回收阶段,将标记对象越过堆的空闲区移动到堆的另一端,所有被移动的对象的引用也会被更新指向新的位置。看起来像是把杂陈的箱子一股脑推到房间的一侧一样。下面,从TenuredGeneration的collect()开... 阅读全文
摘要:
由于虚拟机的分代实现,虚拟机不会考虑各个内存代如何实现垃圾回收,具体的工作(对象内存的分配也是一样)由各内存代根据垃圾回收策略自行实现。 DefNewGeneration的使用复制算法进行回收。复制算法的思想是将eden和from区活跃的对象复制到to区,并清空eden区和from区,如果to... 阅读全文
摘要:
对于HotSpot虚拟机垃圾回收过程,这里将分析介绍默认配置下MarkSweepPolicy的DefNewGeneration和TenuredGeneration的垃圾回收内容以及介绍其他GC策略和代实现的GC思想。GC的过程姑且简单地分为内存代实现无关的GC过程和内存代GC过程。本文将先进行内... 阅读全文
摘要:
系统环境:Ubuntu14.04.3 -amd64 in VMWare1.安装openjdk7依赖sudo apt-get build-dep openjdk-7sudo apt-get install openjdk-7-jdksudo apt-get install build-essentia... 阅读全文
摘要:
Java对象的分配,根据其过程,将其分为快速分配和慢速分配两种形式,其中快速分配使用无锁的指针碰撞技术在新生代的Eden区上进行分配,而慢速分配根据堆的实现方式、GC的实现方式、代的实现方式不同而具有不同的分配调用层次。下面就以bytecodeInterpreter解释器对于new指令的解释出发... 阅读全文
摘要:
源码解析Java堆的结构和创建过程 阅读全文
摘要:
从源码到汇编目标代码分析JVM(Hotspot)的方法调用过程与栈帧结构。 阅读全文
摘要:
虽然说解释执行模式是逐字逐句翻译给目标平台运行的,但这样的过程未免太过缓慢,如果能把字节码说的话做成纸条,运行时只要把对应的纸条交给目标平台就可以了,这样,执行速度就会明显提升。JVM的Hotspot虚拟机的模板解释器就是用这种方法来解释执行的。在开始分析之前,先了解一下JVM的执行方式。 (... 阅读全文
摘要:
在Java应用程序运行时,Java虚拟机会保存一份内部的运行时常量池,它区别于class文件的常量池,是class文件常量池映射到虚拟机中的数据结构。 关于class文件常量池的部分可以参考之前的博文实例探索Class文件。 1.CONSTANT_Class入口解析 数组类的符号解析较为特殊... 阅读全文
摘要:
Java虚拟机通过装载、连接、初始化来使得一个Java类型可以被Java程序所使用,如下图所示,其中连接过程又分为验证、准备、解析三个部分。其中部分类的解析过程可以推迟到程序真正使用其某个符号引用时再去解析。 解析过程可以推迟到类的初始化之后再进行,但这是有条件的,Java虚拟机必须在... 阅读全文