sau*_*yal 14 java jvm heap-memory jvm-hotspot
Java中的对象的实例变量是存储在JVM的堆栈或方法区域中的吗?
另外,我们为多个线程设置了不同的实例变量吗?
如果它存储在方法区域中,实例变量与静态变量存储的不同之处是什么?
Mat*_*lár 20
堆栈和堆是操作系统分配给系统中运行的JVM的内存.堆栈是存储方法和局部变量的存储位置.(变量引用基元或对象引用也存储在堆栈中).堆是存储对象及其实例变量的存储位置.
总结一下:
另外,我们为多个线程设置了不同的实例变量吗?
每个线程都有一个程序计数器(PC)和一个java堆栈.PC将使用java堆栈来存储中间值,动态链接,方法的返回值和调度异常.这用于代替寄存器.
另外,关于线程的更多信息,你真的应该阅读这个主题在哪里创建线程对象?堆栈还是堆?.
如果它存储在方法区域中,实例变量与静态变量存储的不同之处是什么?
如上所示,静态字段存储在堆中.另一方面,局部变量存储在堆栈中.
//编辑
根据Bruno Reis和Peter Lawrey的评论,您还应该阅读Escape分析
准确地说,
参考:Head First Java
大多数 JVM 实现将内存分为以下部分:
我们只讨论方法区、堆栈和堆。
例如参加课程
class Lava {
int i = 5;
static int j = 10;
void flow() { //some implementation}
}
Run Code Online (Sandbox Code Playgroud)
当从类 X 创建该对象的实例时
Lava l = new Lava();
Run Code Online (Sandbox Code Playgroud)
首先,Lava 的 Class 类型,即Lava.class存储在 Method 区域中,其中包含方法、字段和其他引用类型等详细信息。此外,像我们示例中的j这样的静态变量也存储在方法区域本身中。
其次,Object Lava 的实例及其实例变量 i 存储在堆区域中。
第三,它的引用,即我们示例中的l存储在Stack 区域中,它指向在 Heap 中创建的实例。
| 归档时间: |
|
| 查看次数: |
28716 次 |
| 最近记录: |