java – 在代码库中搜索大型方法
发布时间:2020-12-15 02:27:12 所属栏目:Java 来源:网络整理
导读:默认情况下,HotSpot JIT拒绝编译大于8k字节码(1)的方法.有没有什么可以扫描罐子的方法(2)? 除非你传递-XX:-DontCompileHugeMethods Jon Masamitsu描述了解释方法如何减慢垃圾收集,并指出重构通常比-XX更明智:-DontCompileHugeMethods 解决方法 感谢Peter
默认情况下,HotSpot JIT拒绝编译大于8k字节码(1)的方法.有没有什么可以扫描罐子的方法(2)?
>除非你传递-XX:-DontCompileHugeMethods 解决方法
感谢Peter Lawrey指向ASM的指针.这个程序打印出jar中每个方法的大小:
import org.objectweb.asm.ClassReader; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodNode; public static void main(String[] args) throws IOException { for (String filename : args) { System.out.println("Methods in " + filename); ZipFile zip = new ZipFile(filename); Enumeration<? extends ZipEntry> it = zip.entries(); while (it.hasMoreElements()) { InputStream clazz = zip.getInputStream(it.nextElement()); try { ClassReader cr = new ClassReader(clazz); ClassNode cn = new ClassNode(); cr.accept(cn,ClassReader.SKIP_DEBUG); List<MethodNode> methods = cn.methods; for (MethodNode method : methods) { int count = method.instructions.size(); System.out.println(count + " " + cn.name + "." + method.name); } } catch (IllegalArgumentException ignored) { } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |