微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – JDK编译器优化使用没有实例变量的匿名类?

我很好奇,我看到了很多这样的事情:

Arrays.sort(array,new Comparator

因为这里创建的匿名类没有实例变量,标准的JDK编译器是否足够聪明,只能实例化一次匿名类并重用它?或者是否建议在静态字段中实例化匿名类并始终传递静态Comparator对象?

更新:当我说“JDK编译器”时,我的意思是JIT部分.以上也只是一个例子.我真的很好奇,作为一种最佳实践,我应该为上面创建静态字段而不是内联匿名类实例化.在某些情况下,性能/资源使用问题可以忽略不计.但其他情况可能不是……

最佳答案
javac绝对不会这样做;这将违反语言语义. JVM可以在理论上对其进行优化,但它并不那么聪明.静态的会更快.

具有讽刺意味的是,这样的分析和优化对于javac来说很容易,而且它可以在今天完成,除非它被禁止这样做 – 来源说新的,所以javac必须是新的.

有传言说java 8中即将出现的lambda表达式将在这个问题上付出努力

Arrays.sort(array,(Integer a,Integer b) => Math.abs(a)

javac需要分析lambda是无状态的,而懒惰创建的单个实例就足够了,这就是它必须将代码编译成的内容.

原文地址:https://www.jb51.cc/java/437917.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐