Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1405396
  • 博文数量: 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-10 22:55:48

    java中的class文件,类似C/C+=的*.o或*.obj的中间文件,这有点编译型语言的特点。
    java的class文件在装载过程中的连接过程类似C/C++等编译型语言的*.o或*.obj的链接过程。
        它主要是完成对class文件中的符号引用的一个解析和定位的过程,类似C/C++动态库的连接过程,将函数的调用点与实现点连接起来的过程。
    java中的class文件中有符号引用的概念,所有的中间代码的文件中都有这种Symbol reference,class文件装载到内存后,就是常量池的概念了。
         每个类编译后的class文件加载到内存后都有它自己的内存池,class文件加载后是属于方法区,也算是只读区,这个类似C语言中的代码只读区。
    java的类加载后,就会出现一个该类型的Class对象,这个在C++中可能没有,也就是二者的RTTI实现的区别。
         这个Class对象是属于堆区,但是与代码区的类型信息结构构成了一张网,代码区的类型信息结构中可能有未定位的符号引用,类似父类的类型信息结构没有关联起来,或者是类的方法中的其他类型的符号引用或方法引用没有定位,这个都是在java的装载之后的连接过程完成关联的。
    java中的常量池是方法区中的一部分内存数组,所以也算是池,java中的常量池的概念比较宽泛,包括String a="abc“这种,以及static 的变量,final的变量,以及类型的名字、描述符,类型的方法的名字、描述符、属性,类型的字段的名字、描述符、属性。不像C语言中,仅仅只有全局变量。
    java在编译源文件的时候,会将类型的所有初始化代码(静态的初始化结构)集中到一块,形成一个特殊的方法,这个方法是java虚拟机调用的。
阅读(1215) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~