深入理解Java虚拟机笔记1

来源:互联网 发布:淘宝大c家是正品吗 编辑:程序博客网 时间:2024/06/10 13:34

Java的内存区域

1. 程序计数器(Program Counter Register

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

2. Java虚拟机栈

虚拟机栈描述的是Java方法执行的内存模型:

(1).每个方法在执行的同时都会创建一个栈帧,

用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

(2). 每一个方法从调用直至执行完成的过程,

就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

PS

(1).局部变量表存放了编译期可知的各种基本数据类型、对象引用和returnAddress类型

指向了一条字节码指令的地址)。

(2).对象引用(reference类型,它不等同于对象本身,可能是一个指向对象起始地址的引 用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)

3.本地方法栈

与虚拟机栈所发挥的作用是非常相似的,他们之间的区别为:

虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,

而本地方法栈则为虚拟机使用到的Native方法(本地方法)服务。

Native方法常用于两种情况:

(1)在方法中调用一些不是由Java语言写的代码。

(2)在方法中用Java语言直接操纵计算机硬件。

4. Java

Java虚拟机所管理的内存中最大的一块。

Java堆是被所有线程共享的一块内存区域,在虚拟机启动的时候创建。

此内存区域的唯一目的就是存放对象实例(还有数组?),

几乎所有的对象实例都在这里分配内存。

5. 方法区

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

6. 运行时常量池

是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。

7.直接内存