读书笔记

《深入理解Java虚拟机》第二章:Java内存区域与内存溢出异常

2018-06-30  本文已影响37人  ldlywt

Java内存划分

1 程序计数器

是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。

2 Java虚拟栈

3 本地方法栈

4 Java堆

5 方法区

6 对象的创建

当虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,必须执行相应类的加载过程。

假如堆内存是觉得完整的,所有用过的内存都放到一边,空闲的内存放到另外一边,中间放着一个指针作为分界点的指示器,分配内存就是将指针移动一段与内存相等的距离。

内存是不完整的,已使用和空闲的相互交错,虚拟机维护一个列表,记录哪些内存可用,再分配时找到一块足够大小的内存空间给对象实例,并更新列表上的记录。

7 虚拟机保证并发

8 对象的内存布局

分为三块区域:

9 对象的访问定位

通过栈上的reference数据来操作堆上的具体对象。

上一篇 下一篇

猜你喜欢

热点阅读