深入理解Java虚拟机
pengsel
信仰圣光吧。
展开
-
Learning JVM 01 内存区域
Java虚拟机管理的内存包括几个运行时数据区域:方法区、虚拟机栈、本地方法栈、堆、程序计数器。程序计数器(较小)当前线程所执行的字节码的行号指示器。字节解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。每条线程都有一个独立的程序计数器。线程私有。线程执行Java方法,记录虚拟机字节码指令的地址;执行Native方法,则为Undefined。虚拟机栈线程私...原创 2018-12-04 10:32:50 · 90 阅读 · 0 评论 -
Learning JVM 02 访问对象
一个简单的访问Object obj = new Object()Object obj会在Java栈的本地变量表中生成一个***reference类型数据***——指向对象的引用;new Object()在Java堆中形成一块存储Object类型所有实例数据值的结构化内存——对象,Java堆中还必须包含能查到此对象类型数据(对象类型、父类、实现接口、方法)的地址信息,这些类型数据存储于***方法...原创 2018-12-12 16:18:28 · 83 阅读 · 0 评论 -
Learning JVM 03 OutOfMemoryError异常
Java堆溢出发生情况Java堆用于存储对象实例,只要不断创建对象,而垃圾回收机制没有即时清除这些对象,对象数量达到最大堆的数量限制后产生内存溢出异常。public class HeapOOM{ static class OOMObject{}; public static void main(String[] args){ List<OOMObject> list = ...原创 2018-12-12 18:46:01 · 81 阅读 · 0 评论 -
Learning JVM 05 Class类文件的结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。实现语言无关性的基础是虚拟机和字节码存储格式,使用Java编译器可以把Java代码编译成存储字节码的Class文件,虚拟机不关心Class的来源是什么语言,只要它符合Class文件应有的结构就可以在Java虚拟机中运行。Class类文件的数据类型Class文件是一组以8位字节为基础单位的二进制流,各...原创 2018-12-14 13:11:17 · 105 阅读 · 0 评论 -
Learning JVM 06 类的生命周期
类加载机制:虚拟机把类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。动态加载和动态连接:类型的加载和连接过程在程序运行期完成,会增加性能开销,但是可以高度灵活。类的生命周期仅有上述四种虚拟机会对一个类进行主动引用;其他情况下为被动引用。对于静态字段,只要直接定义这个字段的类才会被初始化,通过子类来引用父类中定义的静态...原创 2018-12-15 15:21:23 · 161 阅读 · 0 评论 -
Learning JVM 07 类加载器
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块被称为类加载器。1.类与类加载器比较两个类是否“相等”,只有在这两个类是由同一个类加载器的前提下才有意义,否则,即使这两个类来源于同一个Class文件,只要加载它们的类加载器不同,这两个类就必定不相等。pa...原创 2018-12-17 11:53:58 · 89 阅读 · 0 评论 -
Learning JVM 08 内存模型和线程
什么是内存模型Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java内存模型规定:所有的变量都存储在主内存中;工作内存中保存被该线程使用到的变量的主内存拷贝副本;线程不能直接读写主内存变量;不同线程无法访问对方工作内存中的变量。...原创 2019-01-12 14:55:42 · 105 阅读 · 0 评论 -
Learning JVM 09 线程安全
当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。 --《Java Concurrency In Practice》共享数据的5种分类可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程...原创 2019-01-13 15:44:08 · 85 阅读 · 0 评论