JVM的学习之一程序执行的过程
1、JVM的组成部分
/** * * 一、JVM内存模型有那些部分组成 * 栈、堆、本地方法区、程序计数器、元空间(1.8) * 二、本地方法区放的是什么 * JNI的东西 * 三、程序计数器放的是什么 * 用来指向程序运行的位置的 * 四、元空间放的是什么 * 元空间也叫方法区,元空间是方法区的一个实现,比如说想找一个美女,结果找到了叫xxx的美女 * 本地方法区、程序计数器、栈是线程私有的多少个线程就有多少个 方法区,堆和元空间是共享的。 * 五、元空间放的是什么 * 静态变量、类加载器 * 六、栈放的是什么 * 用来存放函数运行过程中,函数里面的变量的。 * 七、堆区放的是什么 * 堆区主要放的是对象 * */
2、函数调用过程中内存的调用过程
2.1 值类型的函数调用时内存的调用过程
代码如下图
调用时的内存分析如下图
内存调用说明如下
/** * * 一、如下的函数运行的时候内存调用的过程 * 1.1 栈中开辟一个区域 比如说叫main 的栈 * 1.2 栈里先声明一个变量 a = 1; * 1.3 调用 func1 的函数 传入参数 a,此时 栈里在开辟一个空间叫 func1. * (1)func1 里面先声明一个变量 b = 10; * (2)打印下a+b; * (3) 给a 赋一个新值 11; * 1.4 func1 调用完之后 释放掉栈里面开辟的叫func1 的空间。 * 1.5 打印下a 的值 * 二、视频学习地址 * https://www.bilibili.com/video/BV12t411u726/?spm_id_from=333.788.recommend_more_video.0 * * */
2.2 引用类型的函数执行时 内存的调用说明
代码如下
调用时的内存分析如下图
内存调用说明如下
/**
*
* 一、如下是引用函数运行的时候内存调用的过程
* 1.1 栈中开辟一个区域 比如说叫main 的栈
* 1.2 栈里先声明一个变量 a = 10;
* 1.3 调用 func1 的函数 传入参数 a,此时 栈里在开辟一个空间叫 func1.
* (1)func1 里面先声明一个变量 b = 10;
* (2)给Person类在堆中开辟一个空间,id,name都是初始值
* (3) 给id赋值是1;
* (4) name 赋值是 liming
* (4).(1) name 存的也是地址
* (4).(2) liming 存在字符串常量池里面
* 1.4 func1 调用完之后 释放掉栈里面开辟的叫func1 的空间。
* (1)但是 persion 对象在堆中的地址没有被回收,等到GC的回收
* 1.5 打印下a 的值
* 二、视频学习地址
* https://www.bilibili.com/video/BV12t411u726/?spm_id_from=333.788.recommend_more_video.0
*
*
*/