Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1358166
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: Java

2013-04-11 21:12:52

    java中的常量池在java程序加载和链接过程中扮演着很重要的角色。
    java程序中的类型由方法区中的类型数据块定义,由堆区中的相关Class实例所表示。
    java程序在编译后的中间文件是class文件,与C程序编译后的*.o相比,有若干相似之处。
         class文件大致可以分成2个部分,第一部分是常量池区,第二部分是代码区,将类定义中的所有函数编译成字节码。
         *.o的中间文件中也有类似的分段,第一部分是常量区,第二部分是代码区,但是这里的常量区相当于常量池区中的constant_sting_info段,第二部分都是各个函数的具体编译结果。
    常量池的概念有多种含义,在class文件中的常量池的概念就是constant_string_info,constant_fieldref_info的静态描述,class文件中的方法区;在运行时的常量池的概念,就是内存中的数据结构了。
    在加载class文件的过程中,会完成静态的常量池的概念向运行时的常量池的概念的转变。
    下面对class文件中的部分做个简单的说明
              constant_string_info段 表示java源文件中的字面的字符串常量的记录集
                  java源文件中string具体内容在constant_utf8_info中有描述
              constant_class_info段  表示java源文件中出现了所有的类的记录集
                  java源文件中的类的名字的具体内容在constant_utf8_info中有描述
              constant_fieldref_info段 表示java源文件中的类的字段引用的记录集
                  字段在class文件中的表达方式包括了:字段所属类的标示以及字段引用的描述,
                      字段所属类的标识,也就是constant_class_info段的索引
                      字段引用的描述,就是在constant_nameandtype_info段中的索引
              constant_methodref_info段 表示java源文件中的所有类的方法引用的记录集
                  方法在class文件中的表达方式包括了:方法所属类的标示以及方法引用的描述,
                      方法所属类的标识,也就是constant_class_info段的索引
                      方法引用的描述,就是在constant_nameandtype_info段中的索引           
              constant_nameandtype_info段  表示java源文件中的所有的符号引用,包括字段和方法等
                   符号引用在class文件中的表达方式随引用的不同而不同。
                   如果是字段的引用,就是由引用的字段名字在constant_utf8_info段中的索引和字段的类型名在constant_utf8_info段中的索引组成;
                   如果是方法的引用,就是由以引用的方法名在constant_utf8_info段中的索引和方法的声明类型在constant_utf8_info段中的索引组成。           
              constant_utf8_info段 几乎表达了java源文件中的所有具体信息
                   包括类的全限定名,字段引用的全限定名,字段引用的类型,方法引用的全限定名,方法的声明描述符以及常量字符串
              class文件中的最后一个重要的段就是代码段也可以说是方法段。         
   
阅读(1358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~