You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下述Java代码各部分在Java内存模型的存储位置判断是否正确

Java代码内存存储位置判断正误分析

首先给出待分析的Java代码:

class MyClass{
   public void method(){
     String s = new String("a");
   }
}

三个存储位置判断的结论为:前两个正确,第三个错误,具体分析如下:

  • 第一个判断s存放于JVM Stack:正确。s是method方法内的局部引用变量,方法运行时JVM会为当前执行的方法创建栈帧压入虚拟机栈,局部变量就存储在栈帧的局部变量表中,因此引用s本身确实存放在JVM栈中。
  • 第二个判断new String("a")存放于Heap:正确。Java规范中所有通过new关键字创建的对象实例,都统一在堆内存中分配空间,这里new出来的String对象自然也存放在堆里。
  • 第三个判断"a"存放于处于Metaspace的SCP中:错误。首先SCP(字符串常量池)的存储位置在JDK7及之后版本就已经从永久代(PermGen)迁移到了堆内存中;JDK8将永久代替换为元空间(Metaspace)后,字符串常量池依然保留在堆里,并没有移到元空间中。哪怕是早已淘汰的JDK6及更早版本,SCP也处于永久代而非元空间,因此这个表述无论对应哪个JDK版本都不成立。

内容的提问来源于stack exchange,提问作者user567068

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:18:03