【JVM】虚拟机相关知识整理

来源:互联网 发布:淘宝综合排名怎么算 编辑:程序博客网 时间:2024/06/06 00:05

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

但是我觉得,好多东西还是靠自学比较好,别人教你再多,也教不了你能力。

是什么:




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

JVM运行时的数据区:


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

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

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


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

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


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

下图:


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


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



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

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