唐僧喜欢小龙女

导航

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
*
*
*/

 

 

posted on 2021-10-23 19:31  与时具进&不忘初心  阅读(39)  评论(0编辑  收藏  举报