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) |