请问如下例子的内存分配情况

来源:1-2 JVM内存结构详解

慕才子

2020-10-18 09:52:49

# 具体遇到的问题

还是不是特别清楚各种东西到底是放在哪块内存区域的。期望老师以如下的一个例子做一个说明,感激涕零~

# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果




# 粘贴全部相关代码,切记添加代码注释(请勿截图)

class B {

}
public class A {
    public static final String a = "111";
    public static final B b = new B();
    public final B c = new B();
    public final String d = "222";
    public String e = "3333";
    public B f = new B();
    public String g = new String("444");
}


写回答

1回答

大目

2020-10-19

目前A没有被new,只有static的变量会分配。

a,b会分配,在类加载时,分配到方法区中(JDK 8中,是在堆里)

http://img.mukewang.com/climg/5f8d129b0971053416421046.jpg

========

如果A被new了,那么:

  1. a、b在类加载时,分配到方法区中(JDK 8中,是在堆里)

  2. c的引用在栈,值在运行时常量池(JDK 8中,在元空间)

  3. d的引用在栈,值在字符串常量池

  4. efg的引用在栈,值在堆中。

1

Java架构师-技术专家

千万级电商项目从0到100全过程,覆盖Java程序员不同成长阶段的核心问题与解决方案

2672 学习 · 5839 问题

查看课程