gpt4 book ai didi

java - IBM JVM 类加载器如何保存类?

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:42 24 4
gpt4 key购买 nike

在 HotSpot JVM java.lang.Classloader 类中有一个由该类加载器加载的所有类的 Vector。因此,只要类加载器处于 Activity 状态,所有类都会保存在内存中。在 IBM JVM J9 的 java.lang.Classloader 中没有这样的字段。至少我找不到。所以我的问题是:

  1. IBM JVM 的类加载器在哪里保存类缓存?

  2. 如果与上述观点不同:IBM JVM 中的哪些硬引用类,从而阻止卸载?

最佳答案

看我IBM JVM的代码,好像java.lang.ClassLoader是一个抽象类,所以会在某处实现。使用调试器,我发现这是一个名为 sun.misc.Launcher$AppClassLoader 的合成类。
然后,要检索一个类,有一个本地方法
private native Class findLoadedClassImpl(String className);
所以看起来缓存是在 Java 之外的本地方法中完成的。

loadClass 方法的开头,我看到:

// Ask the VM to look in its cache.
Class loadedClass = findLoadedClass(className);

然后它检查 loadedClass 是否为 null,如果是,则尝试使用父类加载器。
所以,我要说的是,除非该方法被继承的类加载器覆盖,否则缓存发生在 Java 之外,在 IBM VM 的某些 native 组件中。

关于java - IBM JVM 类加载器如何保存类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com