我的理解是烫发大小用于存储元数据,其中包括字节码,静态内容等。
我的问题是,反射的使用会如何影响烫发的大小(如果有的话)。
我的意思是,如果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
在现实世界中的应用程序中没有任何区别。