1.JVM的内存管理。
JVM的结构图如下:
从上图可以看到,JVM管理的内存区域主要分为以下几部分:
1、程序计数器(Program Counter Register):占用较小的内存空间,是当前线程执行的字节码的行号指示器。每个线程都会有独立的程序计数器。存放的是字节码指令的地址。
2、Java虚拟机栈(JVM Stacks):线程私有、生命周期与线程相同。主要作用是描述JAVA方法执行的过程:方法被执行时会创建一个栈帧(stack frame),用于存放方法执行时的局部变量、操作栈、动态链接、方法出口等信息。方法从调用到执行完成的过程,就是一个栈帧在虚拟机栈的入栈、出栈过程。
3、本地方法栈(Native Method Stack):作用与虚拟机栈类似,区别在于用于执行本地方法。
4、Java 堆(Heap):虚拟机管理内存最大的一块,被所有线程共享,存放对象实例。垃圾收集器主要管理JAVA 堆。
5、方法区域(Method Area):所有线程共享;用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译的代码等。这个区域的数据是比较固定的,可认为是"永久代"(Permanent Generation)。
6、运行时常量池(Runtime Constant Pool):方法区的一部分。用于存放编译期生成的各种字面量和符号引用。
2.对象访问
看一下简单的对象创建语句:
Object obj = new Object();
“Object obj”语句将会反映到JAVA栈的本地变量表中,作为一个reference的类型出现,存放地址。
“new Object()”语句将会反映到JAVA堆中,形成一块存储了Object类型的所有数据值的结构化内存。另外,这条语句还必须包含能找到此对象类型数据(如对象类型、父类、接口、方法等)的地址信息;这些地址信息的真正存储区域是方法区。
reference类型存放的方式,主要分为两种:
1、句柄访问方式:JAVA堆中划分出一块内存用来存放句柄池,reference中存储的是句柄的地址,而句柄中存储了对象实例数据和类型数据各自的地址。如下图所示:
2、直接指针访问方式:采用这种方式,在JAVA堆布局中就必须放置访问类型数据的相关信息,reference中直接存储的就是对象地址。如下图:
相关推荐
JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具
1.1 对象声明 1.2 相关方法 1.3 系统知识 1.3.1 虚拟内存 1.3.1.1 物理和虚拟寻址 1.3.1.1.1 物理寻址 1.3.1.1.2 虚
一份JVM学习的笔记,含查看JVM运行时信息\JVM垃圾收集信息\JVM锁信息等
JVM学习笔记(一)--------基本结构 JVM学习笔记(二)----java代码编译和执行的整个过程 JVM学习笔记(三)---------内存管理和垃圾回收 JVM学习笔记(四)------内存调优
java之jvm学习笔记十一(访问控制器)-源码
JVM学习笔记.docx
java之jvm学习笔记五(实践写自己的类装载器)
jVM学习笔记.ppt
JVM学习笔记(缓慢更新).md
虚拟机学习笔记--周志明老师第三版
jvm经典笔记
JVM 学习笔记(Java虚拟机)
JVM学习笔记核心知识点整理,包含类文件加载机制,运行时数据,JVM内存模型,GC算法,垃圾收集器分类等
JVM笔记------------------------------------------
买的JVM学习资料(深入JVM内核—原理、诊断与优化),给大家分享还有自己整理的学习笔记
Java分布式应用学习笔记-谈JVM
对jvm内存模型&垃圾收集算法&类加载机制进行了整理,读者可以作为参考进行学习和探讨,,
java之jvm学习笔记八(实践对jar包的代码签名)
title: 黑马JVM学习笔记二 date: 2020-01-13 1:00:00 tags: JVM categories: JVM 黑马jvm 内存结构 内存结构总览图: 程序计数器 1.定义:Program Counter Register 程序计数器 (寄存器) 程序计数器是Java对物理...