java - java中会在哪里创建对象

标签 java java-8 heap-memory

<分区>

下面是我的一位 friend 在讨论中提出的问题,但我们都不知道实际答案是什么。

public class Test {
static int i = 5;
static String str = "Welcome";
static Map<String, String> map = new HashMap<>();
}

在目标代码中,当创建JVM实例并去创建所有三个对象时,它在哪里创建它

- Inside memory/metadata area
- Inside heap area

我们知道,内存区保存了类相关的所有数据(包括静态引用),堆区保存了类的所有实例变量。

但是对于上面的类

- int variable is created(We assume that it will be created in method area
- Not sure about the other two object(String and HashMap)

如果我们有任何误解,请纠正我们,并帮助我们理解这些变量将如何存储在 java 中

最佳答案

对于 Oracle JVM,每个类都有一个特殊的对象来保存它的静态字段。如果进行堆转储,您可以看到这个特殊对象。

注意:没有指定静态成员的存储位置,因此它可以位于基于 JVM 的任何位置。

关于java - java中会在哪里创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45511377/

相关文章:

java - 查找子字符串

java - 无法删除链表中的最后一个节点

java-8 - Java 8 流 : conditionals to avoid repetition?

java - 将 Base64 编码的字符串传递到 sha512 函数会得到与硬编码时不同的结果

java - 如何避免 Sonar 的 "preserve stack trace"违规?

rhino - 从 Rhino 切换到 Nashorn

java-8 - Java8 MetaspaceSize 标志不起作用

c++ - 内存静态变量存储在哪里?

java - 删除分配给字节数组的内存