深入理解Java虚拟机(2)之十六-线程安全与锁优化 深入理解Java虚拟机(2)之十六-线程安全与锁优化
线程安全一、Java语言中的线程安全 不可变 在Java语言中(特指JDK 1.5以后,即Java内存模型被修正之后的Java语言),不可变(Immutable)的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再采取任
2019-07-15
深入理解Java虚拟机(2)之十五-Java内存模型与线程 深入理解Java虚拟机(2)之十五-Java内存模型与线程
Java内存模型1、主内存和工作内存Java内存模型的主要目标是定义程序中各个程序的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与Java编程的变量有所区别,它包括实例字段、静态字段和构成数组对象的元素
2019-07-13
深入理解Java虚拟机(2)之十四-晚期(运行期)优化 深入理解Java虚拟机(2)之十四-晚期(运行期)优化
在部分商用虚拟机中,Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”,在运行时,会将这些代码编译成本地平台相关的机器码,并进行各种层次的优化
2019-07-12
深入理解Java虚拟机(2)之十三-虚拟机字节码执行引擎 深入理解Java虚拟机(2)之十三-虚拟机字节码执行引擎
运行时栈帧结构栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回
2019-07-10
深入理解Java虚拟机(2)之十二-类加载器 深入理解Java虚拟机(2)之十二-类加载器
虚拟机团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类与类加载器比较两个类是否“相等”,只
2019-07-06
深入理解Java虚拟机(2)之十一-虚拟机类加载机制 深入理解Java虚拟机(2)之十一-虚拟机类加载机制
类加载的时机 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)
2019-07-04
深入理解Java虚拟机(2)之十-类文件结构 深入理解Java虚拟机(2)之十-类文件结构
Class类文件的结构Class文件是一组以8字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占
2019-07-02
深入理解Java虚拟机(2)之九-内存分配与回收策略 深入理解Java虚拟机(2)之九-内存分配与回收策略
对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。但Eden区没有足够的空间进行分配时,虚拟机将发生一次Minor GC。如果当GC发现对象无法全部放入Survivor空间,就会通过分配担保机制提前转移到老年代中。 大对象直
2019-07-01
深入理解Java虚拟机(2)之八-垃圾收集器 深入理解Java虚拟机(2)之八-垃圾收集器
图为JDK 1.7 update 14之后的HotSpot虚拟机。 图中展示7种不同分代的收集器,收集器之间有连线说明可以搭配使用。虚拟机所处的区域,表示属于新生代收集器还是老年代收集器。 相关概念并行和并发 并行(Parallel):指
2019-06-29
深入理解Java虚拟机(2)之七-垃圾收集算法 深入理解Java虚拟机(2)之七-垃圾收集算法
1.标记-清除算法(Mark-Sweep) 算法分为两个阶段:首先标记出需要回收的对象,在标记完成后统一回收所有被标记的对象。 该算法主要有两个不足: 一个是效率问题,标记和清除两个效率都不高。 另一个是空间问题,标记清除之后会产生大量不
2019-06-23
深入理解Java虚拟机(2)之六-HotSpot的算法实现 深入理解Java虚拟机(2)之六-HotSpot的算法实现
1、枚举根节点从可达性分析中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在全局的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方法就数百兆,如果逐个检查这里面的引用,必
2019-06-21
深入理解Java虚拟机(2)之五-对象的死亡判定 深入理解Java虚拟机(2)之五-对象的死亡判定
对象存活判定算法1.引用计数算法给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 引用计数算法的实现简单,判定效率也很高,在大部分情况下都是一个不
2019-06-20
1 / 5