Java基础知识:初学者应知道的KVM常量池

发表于:2007-11-22 13:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
Java

        在class文件中,“常量池”是最复杂也最值得关注的内容。

  Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如:

  类和接口的全限定名;

  字段的名称和描述符;

  方法和名称和描述符。

  在C语言中,如果一个程序要调用其它库中的函数,在连接时,该函数在库中的位置(即相对于库文件开头的偏移量)会被写在程序中,在运行时,直接去这个地址调用函数;

  而在Java语言中不是这样,一切都是动态的。编译时,如果发现对其它类方法的调用或者对其它类字段的引用的话,记录进class文件中的,只能是一个文本形式的符号引用,在连接过程中,虚拟机根据这个文本信息去查找对应的方法或字段。

  所以,与Java语言中的所谓“常量”不同,class文件中的“常量”内容很非富,这些常量集中在class中的一个区域存放,一个紧接着一个,这里就称为“常量池”。

  常量池由多条“常量池项”组成,每一个常量池项又由两部分组成,这里分别称为“常量池项头”和“常量池项体”。

  常量池项头表明常量池项的类型,常量池项共分为11种类型,分别为:

  常量池项类型

  值

  说明

  CONSTANT_Utf8

  1

  UTF-8编码的Unicode字符串

  CONSTANT_Integer

  3

  int型常量

  CONSTANT_Float

  4

  Float型常量

  CONSTANT_Long

  5

  Long型常量

  CONSTANT_Double

  6

  double型常量

  CONSTANT_Class

  7

  对一个class的符号引用

  CONSTANT_String

  8

  String型常量

  CONSTANT_Fieldref

  9

  对一个字段的符号引用

  CONSTANT_Methodref

  10

  对一个类方法的符号引用

  CONSTANT_InterfaceMedthodref

  11

  对一个接口方法的符号引用

  CONSTANT_NameAndType

  12

  对名称和类型的符号引用

  常量池项体中存放的就是对应的常量数据,比如各种数值型的常量或者字符串等等。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号