0
点赞
收藏
分享

微信扫一扫

java内存模型

奋斗De奶爸 2021-10-09 阅读 53
随笔

栈:线程私有,为每个加载的方法创建一个栈帧,方法的进入退出分别对应栈帧的压栈和弹栈

      存储基础数据类型的值与对象的引用。是一串连续的内存空间,后进先出

堆:通过new创建的对象存储在堆中,不是连续的内存空间,线程间共享,数组也存储在堆中(即使长度为0,因为开辟了内存空间)

方法区:是线程间共享的区域,用于存储虚拟机已经加载的类信息、常量池、static变量、即时编译器编译后的代码。

String a=new String("aa");---------在堆中创建字符串对象,多次new,则多次创建

String b="aa";-------------------先在常量池中找,没有则新建,有的话直接用,存储在方法区的常量池中

String c=b+b;-------------------带加号的,如果不是final修饰,则也存储在堆中

final String d="bb";

String e=d+b;-------------因为是final的,常量,所以存储在常量池中

jvm中GCRoot根节点:

(1)方法区中静态属性指向的对象

(2)方法区中的常量指向的对象

(3)虚拟机中局部变量指向的对象

(4)本地方法栈中JNI(native修饰方法指向的对象)

举报

相关推荐

0 条评论