gpt4 book ai didi

java - Java 的反射如何影响它的内存占用?

转载 作者:行者123 更新时间:2023-11-30 09:08:38 25 4
gpt4 key购买 nike

好像是an established fact Java 程序比 C++ 程序使用更多的内存。根据an answer on StackExchange ,这是由于垃圾收集的性质和 Java 的“二进制文件”的字节码性质。但是反射在这种情况下扮演什么角色呢?

在 Java 中,可以在运行时以纯文本的形式枚举和调用类的变量和方法。为了使这成为可能,有某种存储的元数据将这些字符串键与其各自的属性链接起来。

这个元数据是否存储在堆上,如果是,有没有办法为我不需要反射的类禁用它? (普通旧数据)

最佳答案

java 的工作方式是将所有类加载到称为 permgen 的内存区域中。任何可用的类都会加载到 permgen 区域中,而不管您是否通过反射使用它的方法。

使用反射

Class.forName("MyClass").newInstance() 

没有反射

new MyClass()

以上两个语句都要求在permgen中加载类

Is this metadata stored on the heap, and if so, is there a way to disabled it for classes for which I don't need reflection anyway? (Plain old data)

而且没有办法禁用它。

但最接近的是实现自定义类加载器来加载类。当您完成使用自定义类加载器加载的特定类时,您可以释放对该类的所有引用并卸载它。我希望它有所帮助。 :)

关于java - Java 的反射如何影响它的内存占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436596/

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