java – JDK编译器优化使用没有实例变量的匿名类?
发布时间:2020-05-24 05:09:55 所属栏目:Java 来源:互联网
导读:我很好奇,我看到了很多这样的事情:Arrays.sort(array, new ComparatorInteger() { public int compare(Integer a, Integer b) { return Math.abs(a) Math.abs(b); } }); 因为这里创建的匿
|
我很好奇,我看到了很多这样的事情:
因为这里创建的匿名类没有实例变量,标准的JDK编译器是否足够聪明,只能实例化一次匿名类并重用它?或者是否建议在静态字段中实例化匿名类并始终传递静态Comparator对象? 更新:当我说“JDK编译器”时,我的意思是JIT部分.以上也只是一个例子.我真的很好奇,作为一种最佳实践,我应该为上面创建静态字段而不是内联匿名类实例化.在某些情况下,性能/资源使用问题可以忽略不计.但其他情况可能不是…… 最佳答案 javac绝对不会这样做;这将违反语言语义. JVM可以在理论上对其进行优化,但它并不那么聪明.静态的会更快.具有讽刺意味的是,这样的分析和优化对于javac来说很容易,而且它可以在今天完成,除非它被禁止这样做 – 来源说新的,所以javac必须是新的. 有传言说java 8中即将出现的lambda表达式将在这个问题上付出努力
javac需要分析lambda是无状态的,而懒惰创建的单个实例就足够了,这就是它必须将代码编译成的内容. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- symfony – 如何结合DoctrineExtensions中的Translatable和
- Spring boot + thymeleaf 后端直接给onclick函数赋值的实现
- java – 从List/ArrayList获取最后三个元素?
- java编程多线程并发处理实例解析
- 使用jetty实现小型的Servlet服务器
- ant支持java 9 addmods选项
- java – ListView Viewholder复选框状态
- java – 可以获取Hibernate sqlRestriction的连接表的SQL别
- 远程对象中javax.json.JsonValue的Java RMI NoClassDefFoun
- 谈谈对Java多态性的一点理解
