Java中对象的实例变量是存放在JVM的栈还是方法区?
此外,我们是否为多个线程设置了不同的实例变量?
如果存储在方法区,实例变量与静态变量存储有何不同?
最佳答案
Stack和heap是OS分配给运行在 system.Stack 是存储方法和局部变量的内存位置。 (变量引用 primitive 或 object 引用也存储在堆栈中)。 堆是存储对象及其实例变量的内存位置。
总结一下:
- 类对象,包括方法代码和静态字段:堆。
- 对象,包括实例字段:堆。
- 局部变量和方法调用:堆栈
Also, do we have different instance variable for multiple threads?
每个线程都有一个程序计数器 (PC) 和一个 java 堆栈。 PC 将使用 java 堆栈来存储中间值、动态链接、方法的返回值和调度异常。这用于代替寄存器。
关于线程的更多信息,您真的应该阅读本主题 Where is Thread Object created? Stack or Heap? .
If it is stored in method area how is instance variable different from static variable storage?
如您所见,静态字段 存储在堆中。另一方面,局部变量存储在堆栈中。
//编辑
根据Bruno Reis的评论和 Peter Lawrey ,您还应该阅读有关逃逸分析
的内容关于java - JVM 中对象的实例变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23550385/