加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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
> Jon Masamitsu描述了解释方法如何减慢垃圾收集,并指出重构通常比-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) {
            }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读