我知道常量池的概念以及JVM用于处理字符串文字的字符串常量池。但是我不知道JVM使用哪种类型的内存来存储String常量文字。堆栈还是堆?由于它的文字不与任何实例相关联,因此我假定它将存储在堆栈中。但是,如果没有任何实例引用该文字,则必须通过GC运行来收集文字(如果我错了,请纠正我),那么如果将其存储在堆栈中,该如何处理?
从技术上来说,答案都不是。根据Java虚拟机规范,用于存储字符串文字的区域位于运行时常量池中。运行时常量池内存区域是按类或每个接口分配的,因此它根本不与任何对象实例绑定。运行时常量池是方法区域的子集,其中“存储每个类的结构,例如运行时常量池,字段和方法数据以及方法和构造函数的代码,包括用于类和实例初始化以及接口的特殊方法”类型初始化”。VM规范说,尽管方法领域 从逻辑上讲,它是堆的一部分,它并不指示在方法区域中分配的内存要进行垃圾回收或其他与分配给堆的常规数据结构相关的行为。