Java面试Android开发经验谈Android开发

深入理解Java虚拟机(一)之内存布局和对象的创建

2018-05-22  本文已影响129人  AntDream

深入理解Java虚拟机系列文章

Java虚拟机管理的内存包括以下几个运行时数据区域:程序计数器、虚拟机栈和本地方法栈为线程私有;Java堆和方法区为线程共享

线程私有内存

程序计数器:是当前线程所执行的字节码的行号指示器

Java虚拟机栈:描述Java方法执行的内存模型,每个Java方法在执行时都会创建一个栈帧,Java方法的执行过程就是栈帧在虚拟机栈中入栈到出栈的过程

局部变量表: 位于虚拟机栈中,存放了编译期可知的各种基本数据类型(如int、long等)、对象引用(refrence类型,可能是指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄)和returnAddress类型(指向了一条字节码指令的地址)

本地方法栈:为虚拟机使用到的Native方法服务,会抛出StackOverflowError和OutOfMemoryError异常

线程共享内存

Java堆:在虚拟机启动时创建,几乎所有的对象实例都在堆上分配内存

方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等

运行时常量池:是方法区的一部分,用于类加载后存放编译期生成的各种字面量和符号引用


普通Java对象的创建

对象的内存布局

对象头

实例数据

对齐填充

对象的访问定位

使用句柄访问
使用直接指针访问
2种访问方式比较

欢迎关注我的微信公众号,和我一起学习一起成长!


AntDream
上一篇 下一篇

猜你喜欢

热点阅读