【JVM】虚拟机初见-运行时数据区图解

本文是听咕泡XX公开课视频整理的笔记,较书本更为总结,感谢。

 

计算机模型(汇编知识):数据集(数据)、指令集(操作指令,+-等)、控制集(分支循环)

 

 

 

JVM运行时的数据区:


程序计数器(每个线程都有):

定义:存储指向当前线程正在运行的指令的地址、行号(用来记录线程切换后寻回地址)

执行native方法时程序计数器记录为空。

 

虚拟机栈(栈的大小不会被限制,XXS代表栈的深度):

定义:指向当前线程运行方法时所需要的数据、指令、返回地址。

 

线程执行方法时,需要出栈入栈,(一个栈是一条线程运行时需要的数据结构)。单位:栈帧(可以理解为一个方法)。栈的深度表示一个栈中可以放多少栈帧(stack:先进后出,方法的压栈(图))

下图:


本地方法栈:native修饰的方法,这里没讲。

 

补充:指令区的包括程序计数器、虚拟机栈,本地方法栈,都是在一个线程中的,线程安全的。简单说就是每个线程都有自己的。

 

 

方法区:类信息、常量、静态变量、JIT(即时编译的一些代码。如动态代理即时生成的类信息)

堆:成员变量、对象实例(静态的变量会指向方法区内的地址,所以说静态变量是全类共享的)。


 
 

 

posted @ 2017-11-03 19:41  黑猫先生  阅读(202)  评论(0编辑  收藏  举报