my *_*YAN 2 java reflection jvm class
我们将用户定义的类Employee的反射用作:
Employee e = new Employee();
Class c = e.getClass();
Run Code Online (Sandbox Code Playgroud)
根据我的知识,第一个JVM加载类Employee的字节码,然后它还为每个加载的类(此处为Employee类)创建一个Class.class对象.在Class.class的对象中,JVM存储有关最近加载的类的元信息.
类的元信息是"方法名称","字段名称"等.这些类型的类,如"Method","Field"等,在java.lang.reflect包中定义.
我看到了Class.java的代码.我在Class.class中找到了返回这些类型的对象或对象数组的方法,如"Method","Field"等.但Class.class中没有一个字段,其类型为"Method","Field"等.
如果我的上述陈述有误,请认真对待.如果上述陈述没有错,那么我有以下疑问:1).在Class.class的哪个字段中存储有关类的各种信息?2).Employee的JVM对象的内存区域和Class.class的对象存储在哪里?3).Employee的JVM字节码的存储区和Class.class的字节码存储在哪里?
在Class.class的哪个字段中存储有关类的各种信息?
这些信息存储在PermGen(<Java 7)或MetaSpace(Java 8+)中的堆中.您无法直接从Java中看到它.
Employee的JVM对象的内存区域和Class.class的对象存储在哪里?
所有对象都存储在堆上.在伊甸园空间中创建较小的对象.
Employee的JVM字节码的存储区和Class.class的字节码存储在哪里?
字节代码存储在PermGen/Metaspace中,如果它完全存储的话.理论上,虽然不是在实践中,但JVM可以根据需要重新读取类文件.
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |