当前位置: 首页 > 知识库问答 >
问题:

什么是java中的运行时常量池和方法区

轩辕风华
2023-03-14

什么是运行时常量池和java中的方法区。我读到JVM创造了这两个,但是哪一个是第一个存在的?还有它们包含什么?任何帮助将不胜感激。

共有1个答案

牛智志
2023-03-14

按照http://www.artima.com/insidejvm/ed2/jvm2.html

方法区

一些运行时数据区域在应用程序的所有线程之间共享,其他区域对单个线程是唯一的。JVM的每个实例都有一个方法区和一个堆。这些区域由VM内部运行的所有线程共享。当VM加载类文件时,它会从类文件中包含的二进制数据中解析有关类型的信息。它将此类型信息放置到方法区域中。

运行时常量池

类文件将其所有符号引用保存在一个位置,即常量池中。每个类文件都有一个常量池,Java虚拟机加载的每个类或接口都有其常量池的内部版本,称为运行时常量池。运行时常量池是一种特定于实现的数据结构,映射到类文件中的常量池。因此,初始加载类型后,该类型的所有符号引用都驻留在该类型的运行时常量池中。

 类似资料:
  • 本文向大家介绍Java中的字符串常量池是什么?,包括了Java中的字符串常量池是什么?的使用技巧和注意事项,需要的朋友参考一下 当您将字符串存储为 JVM会直接在一个单独的内存块(称为String常量池)中创建具有给定值的String对象。 每当我们尝试创建另一个String作为 JVM会验证String常量池中是否存在具有相同值的String对象,如果不是,JVM会创建新对象而不是创建新对象,而

  • 通过阅读Oracle JVM体系结构文档: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html 运行时常量池是类文件中常量池表的每类或每接口运行时表示形式(§4.4)。 我知道每个类都有一个运行时常量池(如果我错了,请纠正我)。 然而,我感到困惑的是,如果我有两个不同的类A和B,每个类都有一个私有的字符串变量,比如。 如果我

  • 问题内容: 作为希望完善其编程技能的Java程序员,我经常遇到必须创建运行时异常的情况。我知道,如果明智地使用它是一个好习惯。 就我个人而言, NullPointerException 和 IllegalStateException 是我创建的软件中最常用的。你呢? 您经常使用哪些运行时异常?您在什么情况下使用它们? 问题答案: 我从不抛出 NullPointerException 。对我来说,当

  • 问题内容: 我试图了解该方法的作用。 该文档说,它“返回对象的运行时类”。这种解释并不能帮助我理解该术语。 是否有人简单地描述了什么是“运行时类”,它是什么? 问题答案: 只需将其理解为“具有该对象类型的所有元数据的对象”即可。在该对象中,您可以找到在类,字段,类型层次结构等中声明的方法。该信息通常由使用反射来检查对象/类型或运行方法的代码使用,而无需使用在对它们进行编码时定义和编译的类。 可以强

  • 根据以下链接,java堆栈框架包含本地变量、操作数堆栈和当前类常量池引用。http://blog.jamesdbloom.com/JVMInternals.html 同样来自Oracle“JVM结构”第2.6节。3.“动态链接-每个帧(§2.6)包含对当前方法类型的运行时常量池(§2.5.5)的引用,以支持方法代码的动态链接。” 我还读到堆中的对象也有一个指向类数据的指针/引用。https://w

  • 问题内容: 我看过这样的例子: 并假设我可以有一个Constants类来包装常量,并声明它们为static final。我几乎不了解Java,并且想知道这是否是创建常量的最佳方法。 问题答案: 这是完全可以接受的,甚至可能是标准。 类型是哪里,是所有大写字母的名称,下划线带有空格,并且VALUE是常量值; 我强烈建议不要将常量放在自己的类或接口中。 附带说明:声明为final且可变的变量仍然可以更