好像是an established fact Java 程序比 C++ 程序使用更多的内存。根据an answer on StackExchange ,这是由于垃圾收集的性质和 Java“二进制文件”的字节码性质造成的。但反射在这种情况下扮演什么角色呢?
在 Java 中,可以以纯文本形式枚举和调用类的变量和方法,这些变量和方法是在运行时提供的。为此,需要某种存储的元数据将这些字符串键与其各自的属性链接起来。
此元数据是否存储在堆上,如果是,是否有办法为我不需要反射的类禁用它? (普通旧数据)
最佳答案
java 的工作方式是将所有类加载到称为 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/