码迷,mamicode.com
首页 > 编程语言 > 详细

深入理解 Java 虚拟机之学习笔记(1)

时间:2017-06-11 22:16:16      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:size   虚拟   技术   odi   运行时   gif   memory   系统   内存模型   

本书结构:
  • 从宏观的角度介绍了整个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)

标签:size   虚拟   技术   odi   运行时   gif   memory   系统   内存模型   

原文地址:http://www.cnblogs.com/zpfbuaa/p/6986502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!