微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM内存模型

  • 本地方法栈,存放C++的native方法

  • 程序计数器,指向程序当前运行的位置

  • 栈(JVM栈),存放 函数、当前运行时的临时变量,存储的是对象的地址,最终指向堆存储的实际对象;如果一个对象在方法中new出来,并且只在这方法中使用,这个对象会存放在栈中,当方法结束就会清理掉这个方法栈,减轻了GC的压力(JDK6-Java逃逸)

本地方法栈+程序计数器+栈(JVM栈),叫栈区,是线程私有的,有多少个线程就有多少个栈区

  • 方法区(元空间),存放 static 的类、变量、方法,classloader 等全局数据信息

  • ,存储对象,全局共享

JVM运行过程中的内存变化

public static void main(String[] args){
int a=10;
fun1(a);  //打印 11
System.out.println(a); //打印 10
}
static fun1(int a){
   a++;
   System.out.println(a);
}

如上代码,main方法中,fun1() 结束时,会清理掉fun1()的方法栈,此时再打印 a,会去读取main 方法中的 变量 a,值为 10

  • 方法栈运行时可能产生对象,会在堆上开辟一块内存存储此对象,方法栈上会存储此对象的一个指针,当方法结束时,会清理掉这个指针,此时堆上的这个对象在当前栈区便没有引用指针了,但是又不知道是否有其他栈区(线程)有引用,清理问题,此时涉及到GC垃圾回收

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐