java - java引用变量存储在哪里?

标签 java variables pointers memory reference

Java 的引用变量是如何存储的?是不是和 C 指针类似?

我所说的引用变量是这段代码中的 myDog

Dog myDog = new Dog();

我了解C指针,如果是全局变量它存储在堆中,如果是局部变量它存储在堆栈中。我想知道java的工作方式相同。

最佳答案

您需要了解一些较低级别的 Java 内存组织。在堆栈上,存储了指向堆的基元(int、double、boolean 等)和对象引用

在任何对象内部都是如此。它要么直接包含对其他对象或原语的引用。对象在任何上下文中都是始终引用,并且这些引用是按值传递的。

所以我们可能有:

[ STACK ]                          [ HEAP ] 
int a: 10;                     ->  MyWrapperObject@21f03b70====||
double b: 10.4;                |   ||     int someField: 11    ||
MyWrapperObject@21f03b70 ------|   ||     String@10112222  ---------- 
......                             ||==========================||    |
                                                                     |
                                                                     |
                                    String@10112222============||<----
                                    || ...                     ||
                                    || ...                     ||
                                    }}=========================||

请注意,在某些情况下(如通过 JVM 内部)使用的对象可能存储在非堆内存中。

关于java - java引用变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623563/

相关文章:

c - C 中虚拟内存的组织

c - 数组名是指针吗?

c++ - 为什么我们不能在栈上分配动态内存?

java - 无法避免 hibernate 记录 SQL 以使用 Spring Boot 和 Logback 进行控制台

java - 我收到错误 : class, 接口(interface)或预期的枚举,但我无法弄清楚

c++ - visual studio 2010 在调试期间显示 const int 0

c++ - 多级指针,栈还是堆?

java - 在Windows上的Eclipse中配置Hadoop 2.6.0时出现问题

java - java中如何使用Comparator对二维数组进行排序

c - 未使用的变量影响程序