java - JVM 中对象的实例变量存储在哪里?

标签 java jvm heap-memory jvm-hotspot

Java中对象的实例变量是存放在JVM的栈还是方法区?

此外,我们是否为多个线程设置了不同的实例变量?

如果存储在方法区,实例变量与静态变量存储有何不同?

最佳答案

Stackheap是OS分配给运行在 system.Stack 是存储方法和局部变量的内存位置。 (变量引用 primitiveobject 引用也存储在堆栈中)。 是存储对象及其实例变量的内存位置。

总结一下:

  • 类对象,包括方法代码和静态字段:堆。
  • 对象,包括实例字段:堆。
  • 局部变量和方法调用:堆栈

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 ,您还应该阅读有关逃逸分析

的内容
  1. Wikipedia
  2. Virtual Machine Performance Enhancements,Escape Analysis

关于java - JVM 中对象的实例变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23550385/

相关文章:

java - 具有身份验证的 Spring Boot 项目结构

java - PermGen和Heap,区别及其意义

heap-memory - 堆检查 A6-敏感数据暴露

node.js - 使用 webfont 生成字体 : FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

java - 是否曾在运行中的 JVM 中调用过此方法

c++ - 在堆中创建一个函数指针数组

java - Android:从jar中获取Java源代码

使用对象/方法进行 Java 编程

java - Swing 中的工具提示

java - 在 Byte Buddy 中禁用标识符验证