Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 8中的字符串常量池位于哪个内存区方法区?_Java_Memory Management_Jvm - Fatal编程技术网

java 8中的字符串常量池位于哪个内存区方法区?

java 8中的字符串常量池位于哪个内存区方法区?,java,memory-management,jvm,Java,Memory Management,Jvm,我读过oracle文档,但并没有给出关于方法区域和字符串常量池的任何信息。我怀疑JDK 8或8+中的方法区域、字符串常量池驻留在内存中的位置。java语言规范没有指定它的位置 这也没关系。这些对象最终被创建,没有办法直接访问它们,这无关紧要 java就是这样工作的:规范说明了您可以依赖和不可以依赖的东西,这为JVM实现提供了空间,让它们可以做任何他们想做的事情,只要它们履行了合同。“内存在哪里…”是一个在java中无关紧要的问题,您根本无法直接操作内存 回到为什么你认为你需要知道并找到另一种方法

我读过oracle文档,但并没有给出关于方法区域和字符串常量池的任何信息。我怀疑JDK 8或8+中的方法区域、字符串常量池驻留在内存中的位置。

java语言规范没有指定它的位置

这也没关系。这些对象最终被创建,没有办法直接访问它们,这无关紧要

java就是这样工作的:规范说明了您可以依赖和不可以依赖的东西,这为JVM实现提供了空间,让它们可以做任何他们想做的事情,只要它们履行了合同。“内存在哪里…”是一个在java中无关紧要的问题,您根本无法直接操作内存


回到为什么你认为你需要知道并找到另一种方法;这个问题的任何答案都是特定于JVM的某些实现的,因此您的代码不会是可移植的。也就是说,任何对JVM的版本更新,或者一些替代JVM实现(如OpenJ9)都会滚动,您的代码就会中断,可能是原始核心转储。这听起来不是个好主意。

java语言规范没有指定它的位置

这也没关系。这些对象最终被创建,没有办法直接访问它们,这无关紧要

java就是这样工作的:规范说明了您可以依赖和不可以依赖的东西,这为JVM实现提供了空间,让它们可以做任何他们想做的事情,只要它们履行了合同。“内存在哪里…”是一个在java中无关紧要的问题,您根本无法直接操作内存

回到为什么你认为你需要知道并找到另一种方法;这个问题的任何答案都是特定于JVM的某些实现的,因此您的代码不会是可移植的。也就是说,任何对JVM的版本更新,或者一些替代JVM实现(如OpenJ9)都会滚动,您的代码就会中断,可能是原始核心转储。这听起来不是个好主意。

在Java 8及更高版本中:

  • 方法区域位于元空间中
  • 字符串池位于常规堆中
这是Oracle和OpenJDK JVM的实现细节。其他实现可能不同。但是字符串和代码存储在哪里并不重要。您的应用程序不需要知道


顺便说一下,它被称为“字符串池”,而不是“字符串常量池”

  • 所有字符串都是不变的
  • 声明为
    static final
    (在这个意义上是常量)的字符串变量不一定在字符串池中
  • 并非字符串池中的所有字符串都是
    静态final
  • 并非字符串池中的所有字符串都是字符串文本或其他编译时常量值
    • 在Java 8及更高版本中:

      • 方法区域位于元空间中
      • 字符串池位于常规堆中
      这是Oracle和OpenJDK JVM的实现细节。其他实现可能不同。但是字符串和代码存储在哪里并不重要。您的应用程序不需要知道


      顺便说一下,它被称为“字符串池”,而不是“字符串常量池”

      • 所有字符串都是不变的
      • 声明为
        static final
        (在这个意义上是常量)的字符串变量不一定在字符串池中
      • 并非字符串池中的所有字符串都是
        静态final
      • 并非字符串池中的所有字符串都是字符串文本或其他编译时常量值