gpt4 book ai didi

Java:当类加载器加载时,为类的物理字节分配的内存在哪里?

转载 作者:行者123 更新时间:2023-12-04 15:06:43 25 4
gpt4 key购买 nike

我在虚拟应用程序中构建了一个微型自定义类加载器,以便了解动态类加载的工作原理。对于这个问题,除了提及它实例化我的类加载器的两个不同实例并让每个实例加载不同的类之外,我不需要详细了解它的作用,以便我可以通过确认“ClassNotFoundException"来自其中一个类加载器实例,当只有另一个加载器实例加载了特定类时。

但是,我有一个问题可以很容易地用下面的代码行来表达,希望是不言自明的代码行。

        Class clazz = myClassLoader.loadClass(theClazz);

这行代码使我的自定义类加载器将类字节加载到内存中,并返回该类的 Class 对象的实例。

我的问题是:加载类的物理内存字节位于何处(即 .class 文件的内容)?它们是存储在 ClassLoader 对象中,还是存储在 Class 对象中(因此 ClassLoader 对象仅包含对此 Class 的内部引用object) - 或者完全在其他地方?

最佳答案

类加载器对象有一个它已加载的所有类的集合。

如果同一个物理类被 2 个不同的类加载器加载,则该类的字节在内存中是两倍。这两个类的行为就像不同的类型。他们彼此不相容!字节存储在哪里并不真正相关,我想知道你为什么想知道那个。如果您编写自己的 ClassLoader,您可以将它们“存储”在任何您想要的地方。然而在某些时候你会像这样调用:ClassLoader.defineClass(String, byte[], int, int)。然后创建 VM 内存中的相关结构(MethodArea、ConstantPool 等),如其他答案中所述。

关于Java:当类加载器加载时,为类的物理字节分配的内存在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6068301/

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