程序员

JVM系列——JAVA内存区域与内存溢出异常

2019-08-18  本文已影响0人  阿斯巴甜不太甜

最近更新的两篇String分析的文章,其实都是学习JAVA虚拟机时候遇到的一些问题总结,刚把《深入理解JAVA虚拟机》第二章看完,这篇文章将会介绍一下JAVA内存区域中常见 的一些问题。

1.运行时的数据区域

image

程序计数器

JAVA虚拟机栈

本地方法栈

JAVA堆

方法区

运行时常量池

2. HotSpot虚拟机对象

对象的创建过程

对象的内存布局

对象在内存中的布局可以分为3块区域:对象头、实例数据和对齐填充。

对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,另一部分则为类型指针。如果对象是一个数组,则对象头中还必须有一块用于记录数组长度的数据。

对象的访问定位

为了使用对象,需要通过栈上的对象引用数据来对对象实例进行访问。主流的访问方式有两种:使用句柄和直接指针。

对比:直接访问的优势就是速度快,而句柄访问的优势就是栈中的引用存储稳定(一旦实例被移动,只会改句柄池中的实例数据指针)。Sun的HotSpot目前采用的是直接访问方式。

上一篇 下一篇

猜你喜欢

热点阅读