目录
JVM作为Java的一个核心,那么它的内存结构是怎么样的呢?
废话不多说,开整~
在运行时,系统会分配自身内存给jvm,jvm再把这份内存分割成五块,分给它的五个小弟(活都给小弟了,自己不要干活,爽歪歪~),这五个小弟分别是:
- 栈
- 堆
- 方法区
- 本地方法栈
- 程序计数器
本地方法栈这个4号小弟主要是跟C++的native方法有关,
程序计数器这个5号小弟主要是指向当前程序运行的位置,
这两个小弟我们没怎么听说过,所以暂时跳过。
1. 栈
JVM的一号小弟叫栈,也就是小弟们中的老大。
职能:记录方法的执行顺序、临时变量。
2. 堆
然后又到了二号小弟,堆,同样也是一种数据结构。
职能:存储对象。
3. 方法区
方法区的实现方式
jdk8之前是永久代,jdk8及以后是元空间
主要存储一些静态变量,ClassLoader
4. 例子
- main方法先入栈
在方法区,开辟age的空间,值为22;
栈中的对象引用p指向堆中的新建的Person对象;
fun1() ;( 先执行fun() )
输出语句;
fun1()修改完毕 -> 删除fun1() 占用的空间
- fun1() 入栈
修改形参p.age
修改形参p.name
fun1()修改完毕 -> 删除fun1() 占用的空间
回到main方法
最后也会通过算法判断是否要用GC去回收堆中Person的空间