深入理解 Java 虚拟机之学习笔记(1)
2017-06-11 21:41
441 查看
本书结构:
从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译
讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因
分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎
讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理
讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果
探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作,原子性、可见性和有序性在Java内存模型中的体现,先行发生原则的规则和使用,线程在Java语言中的实现原理,虚拟机实现高效并发所做的一些列锁优化措施。
Java虚拟机运行时数据区如下图所示:
第一个是程序计数器:标识机器码行号,进行跳转等操作,只需要修改程序计数器就可以实现。
第二个是虚拟机栈:保存局部变量表,如果访问超过栈的深度,并且不支持动态扩展,因此报出StackOverFlowError,当前大多数虚拟机均支持虚拟机栈动态扩展,如果没有足够空间保存局部变量表则报出OutOfMemoryError.
第三个是本地方法栈:本地方法栈未规定语言、使用方式、数据结构,因此具体的虚拟机可以自由实现它。同样和虚拟机栈一样抛出StackOverFlowError和OutOfMemoryError
第四个是Java 堆:虚拟机启动时创建,唯一目的是存放对象实例。几乎所有的对象实例都在这里分配内存。Java堆是垃圾回收管理的主要区域。因此Java堆也称为“GC”堆(垃圾堆)。Java堆的细化,新生代和老年代。都是为了更好的回收内存,更快地分配内存。
第五个为方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。别名 Non-Heap(非堆)
第六个为运行时常量池:
第七个是直接内存
下一节为演示不同数据区域的OutOfMemoryError以及StackOverflowError异常调试程序。
从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译
讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因
分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎
讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理
讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果
探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作,原子性、可见性和有序性在Java内存模型中的体现,先行发生原则的规则和使用,线程在Java语言中的实现原理,虚拟机实现高效并发所做的一些列锁优化措施。
Java虚拟机运行时数据区如下图所示:
第一个是程序计数器:标识机器码行号,进行跳转等操作,只需要修改程序计数器就可以实现。
第二个是虚拟机栈:保存局部变量表,如果访问超过栈的深度,并且不支持动态扩展,因此报出StackOverFlowError,当前大多数虚拟机均支持虚拟机栈动态扩展,如果没有足够空间保存局部变量表则报出OutOfMemoryError.
第三个是本地方法栈:本地方法栈未规定语言、使用方式、数据结构,因此具体的虚拟机可以自由实现它。同样和虚拟机栈一样抛出StackOverFlowError和OutOfMemoryError
第四个是Java 堆:虚拟机启动时创建,唯一目的是存放对象实例。几乎所有的对象实例都在这里分配内存。Java堆是垃圾回收管理的主要区域。因此Java堆也称为“GC”堆(垃圾堆)。Java堆的细化,新生代和老年代。都是为了更好的回收内存,更快地分配内存。
第五个为方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。别名 Non-Heap(非堆)
第六个为运行时常量池:
第七个是直接内存
下一节为演示不同数据区域的OutOfMemoryError以及StackOverflowError异常调试程序。
相关文章推荐
- 《深入理解 Java 虚拟机》学习笔记(1)—— JVM 运行时数据区
- 【深入理解Java虚拟机学习笔记】虚拟机类加载机制
- 深入理解Java虚拟机—学习笔记(1)Java内存区域与内存溢出异常
- 深入理解java虚拟机-学习笔记01
- 深入理解Java虚拟机-学习笔记
- 深入理解java虚拟机-学习笔记
- 《深入理解 Java 虚拟机》学习笔记(1)—— JVM 运行时数据区
- 深入理解Java虚拟机-学习笔记-第一章-走近java
- 《深入理解 Java 虚拟机》学习笔记(1)—— JVM 运行时数据区
- 深入理解java虚拟机学习 笔记 第二章 java 内存区域和内存溢出异常
- 深入理解 Java 虚拟机之学习笔记(2)
- 深入理解 Java 虚拟机之学习笔记(3)
- 学习深入理解java虚拟机笔记--对象已死吗
- 深入理解Java虚拟机笔记---运行时栈帧结构
- 第2章 Java内存区域与内存溢出异常--《深入理解 Java 虚拟机》笔记
- 深入理解Java虚拟机笔记---方法表集合
- 第6章 类文件结构--《深入理解 Java 虚拟机》笔记
- 深入理解JAVA虚拟机笔记 - 04
- 深入Java虚拟机JVM类加载初始化学习笔记
- 深入理解Java虚拟机笔记---内存模型