写点什么

JVM 内存模型学习笔记(一)

用户头像
风翱
关注
发布于: 2 小时前

JVM 内存模型


一、JVM 内存结构

每个线程都只能访问自己的线程栈,不能访问其他线程的局部变量。所有原生类型的局部变量都存储在线程栈中,因此对其他线程是不可见的。线程可以将一个原生变量值的副本传给另一个线程,但不能共享原生局部变量本身。

堆内存中包含了 Java 代码中创建的所有对象,不管是哪个线程创建的。其中也包含了包装类型(如:Btye、Boolean、Integer、Long、Float 等)。不管是创建一个对象并将其赋值给局部变量,还是赋值给另一个对象的成员变量,创建的对象都会被保存在堆内存中。

如果是原生数据类型的局部变量,那么他的内容就全部保留在线程栈上。如果是对象引用,则栈中的局部变量曹位中保存着对象的引用地址,而实际的对象内容保存在堆中。

对象的成员变量与对象本身一起存储在堆上,不管成员变量的类型是原生数值,还是对象引用。

类的静态变量则和类定义一样都保存在堆中。

堆内存又称为“共享堆”,堆中的所有对象,可以被所有线程访问,只要他们能拿到对象的引用地址。如果一个线程可以访问某个对象时,也就可以访问该对象的成员变量。如果两个线程同时调用某个对象的同一个方法,则他们都可以访问到这个对象的成员变量,但每个线程的局部变量副本时独立的。


二、JVM 内存整体结构

每启动一个线程,JVM 就会在栈空间栈分配对应的线程栈,比如 1MB 的空间(-Xss1m)。线程栈也叫做 Java 方法栈。如果使用了 JNI 方法,则会分配一个单独的本地方法栈(Native Stack)。


发布于: 2 小时前阅读数: 2
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
JVM内存模型学习笔记(一)