【发布时间】:2014-05-20 04:52:39
【问题描述】:
什么是 java 中的运行时常量池和方法区。我读到 JVM 创建了它们,但是哪一个是第一个存在的?它们还包含什么?任何帮助将不胜感激。
【问题讨论】:
标签: jvm computer-science
什么是 java 中的运行时常量池和方法区。我读到 JVM 创建了它们,但是哪一个是第一个存在的?它们还包含什么?任何帮助将不胜感激。
【问题讨论】:
标签: jvm computer-science
根据http://www.artima.com/insidejvm/ed2/jvm2.html
方法区
某些运行时数据区域在应用程序的所有线程之间共享,而其他数据区域对各个线程来说是唯一的。 JVM 的每个实例都有一个方法区和一个堆。这些区域由运行在 VM 内的所有线程共享。当 VM 加载类文件时,它会从类文件中包含的二进制数据中解析有关类型的信息。它将这个类型信息放入方法区域。
运行时常量池
类文件将其所有符号引用保存在一个地方,即常量池。每个类文件都有一个常量池,Java 虚拟机加载的每个类或接口都有一个内部版本的常量池,称为运行时常量池。运行时常量池是一种特定于实现的数据结构,它映射到类文件中的常量池。因此,在初始加载类型之后,来自该类型的所有符号引用都驻留在该类型的运行时常量池中。
【讨论】:
symbolic reference的真正含义吗?