刚阅读深入Jvm,有几个问题一直没弄清!
1.ClassLoader加载CLASS文件,会调用DefineClass()方法生成一个CLass类的实例,这个实例有什么用呢??这个实例是什么组成的呢??
2.编译生成的Class文件中,常量池中有CONTANST_Fieldref,它和下面的fields,他们有什么关系呢??
3.JDBC的DriverManager中有native的方法getCallerClassLoader,它对应的dll文件在什么地方啊????

解决方案 »

  1.   

    还有谁有清晰版的《深入java虚拟机》,关键是要有目录。有的传个给我。邮箱:[email protected]
      

  2.   

    1.ClassLoader加载CLASS文件,会调用DefineClass()方法生成一个CLass类的实例,这个实例有什么用呢??这个实例是什么组成的呢??
    这个Class对象在反射的时候很有用,可以获取一个类里的所有方法和字段,如果你用过反射相关的东西就该知道如上面所说,这个Class类就是存储的.class文件解析后构成的类数据结构,包括方法,字段,常量池等它都会包括2.编译生成的Class文件中,常量池中有CONTANST_Fieldref,它和下面的fields,他们有什么关系呢??
    fields——field_info,记录的是本类里包含的字段信息,CONTANST_Fieldref一般存储的是本类中方法中用到的字段,如我在A类里某个方法中用了B类的a字段,a字段也会记录在CONTANST_Fieldref中,我在某个方法中使用了本类中的某个字段,也会记录在CONTANST_Fieldref中3.JDBC的DriverManager中有native的方法getCallerClassLoader,它对应的dll文件在什么地方啊????
    这个不同的虚拟机实现可以放到不同的地方,没有统一的路径和文件名
      

  3.   

    那对于本类中用到的字段,CONTANST_Fieldref中有,field_info中也有,不是相当于储存了2次,这对于JVM有什么意义吗??还有就是对于本类字段,JVM应该从CONTANST_Fieldref中找还是从field_info中查找呢???
      

  4.   

    举个例子,我要通过反射查看一个类的所有字段,那么就需要field_info(只保存本类声明的字段)
    如果是方法里用到了,我就需要常量池CONTANST_Fieldref(只要方法调用过程涉及,不管是本类还是其他类的,都会包含)
      

  5.   

    首先要搞明白jvm中常量池在方法调用过程中的重要作用