JAVA 虚拟机学习整理 一、基本结构

一、JAVA虚拟机基本结构

1. JAVA虚拟机的基本结构图


1.1JVM内部结构图

类加载子系统:负责从文件系统或网络加载Class信息,加载的类信息存放在方法区中

方法区JDK1.6/1.7可以理解为permgen space (永久驻留区),里面还包括一些运行时的常量池信息,

字符串字面值. JDK1.8开始已经没有这个概念,1.8称为”元空间”,其大小只受物理内存限制。

:虚拟机启动时候建立,存放java实例对象,所有线程共享该区域

直接内存:物理内存,java NIO库允许java直接使用物理内存

:每个线程都有一个私有的java栈,存放局部变量、帧、方法参数等信息。

本地方法栈:和栈类似,主要用于java本地方法调用,如调用C++程序方法

PC寄存器:指向正在被执行的指令,每个线程的私有区域


2.堆和栈的内部一般结构


大多数情况下新创建的对象首先分配到End区,进过一次新生代回收后,

如果对象还存活就进入s0或s1区,之后每经过一次回收,

如果对象还存活年龄就加1,达到一定年龄还存活就进入老年代。

参数 -Xmx500m  指定堆最大空间为500M

参数 -Xss10m  指定栈的最大空间为10M



一个栈帧包括 {局部变量表,操作数栈,帧数据区} 三个部分。

局部变量表:保存函数的参数以及局部变量,函数调用结束,

随栈帧的销毁局部变量表也销毁。

操作数栈:主要保存计算过程中的结果和变量的临时存储空间

帧数据区:保存访问常量池的指针,异常处理表也是其中的一部分。

栈上分配:线程私有的对象(不被其他线程访问的对象)可以被分配到栈上,

函数调用结束后自行销毁,比如函数中定义的局部对象等。


3.堆和栈、方法区的关系

有如下代码:














猜你喜欢

转载自blog.csdn.net/gzt19881123/article/details/53306649