我的理解是烫发大小用于存储元数据,其中包括字节码,静态内容等。

我的问题是,反射的使用会如何影响烫发的大小(如果有的话)。
我的意思是,如果Program-A使用正常的对象运行方式,而Program-B始终使用反射方式,那么这两个程序的烫发大小将如何比较

最佳答案

当您执行将加载新类内部化字符串的代码时,烫发空间将增加。当然,必须加载反射类。我不确定反射API是否确实大量使用了内部化的字符串,但是应该不难发现。

例如,对于getDeclaredMethod(String name, Class<?>... parameterTypes)方法,名称参数将被内部化。

该代码片段将很好地填充烫发空间:

Random random = new Random();
while(true){
    try {
        X.class.getDeclaredMethod(toBinaryString(random.nextLong()));
    } catch (Exception e) {
    }
}

alt text http://img4.imageshack.us/img4/9725/permgen.jpg

在现实世界中的应用程序中没有任何区别。

10-08 00:18