【问题标题】:Example to write optimised code by seeing compiler code of built-in classes [closed]通过查看内置类的编译器代码来编写优化代码的示例 [关闭]
【发布时间】:2012-10-23 00:30:06
【问题描述】:

这可能不是一个实际的问题,但我只是为了获得一些有价值的附加知识而提出这个问题。我已经多次遇到这种情况(如阅读许多文章和博客),一旦一个人成为特定编程语言的专家,他们倾向于通过查看最细微的细节是如何实现来优化他们构建的任何应用程序中的代码通过查看他们用于开发应用程序的每个内置类的编译器代码。但我没有见过这种情况的例子。任何人都可以请任何建议或给一个sn-p。我非常擅长 Java,所以如果 Java 中存在任何这样的优化示例,任何人都可以写一个代码 sn-p。 如果不是我不介意任何编。作为问题的语言几乎涵盖了目前使用的语言。

【问题讨论】:

  • 您是在谈论基于对语言的特殊性和/或其实现(编译器、解释器等)的了解而做出的优化决策?
  • 是的,仅基于此
  • 嗯,我从来没有反汇编过 Java 代码,不是因为我认为它无法优化,而是因为编译器发生了变化(并且改进了!),而程序仍然存在,所以在我看来,最好的做法是是在保持代码可读性的同时仍然优化对象分配(这可能会或可能不会增加 Java 成本),使用缓存频繁使用的数据来用内存换取 CPU 时间。你想让我给你一个详细的答案吗?

标签: java optimization compiler-construction


【解决方案1】:

一旦一个人成为特定编程语言的专家,他们就会倾向于通过查看他们用于开发的每个内置类的编译器代码来了解最细微的细节是如何实现的,从而优化他们构建的任何应用程序中的代码应用程序

其实我会说相反的,而是你更有可能看到

  • 初学者:只需要得到任何有用的东西。
  • 中级:尝试优化一切,因为你可以。
  • 专家:易于理解和维护是最重要的。简单、干净的代码通常表现最好,当您确定需要优化代码时,才这样做。例如因为您使用分析器对其进行了测量。

任何人都可以请任何建议或给一个sn-p

我建议您阅读 java.lang.*java.util.*java.util.concurent.* 中的代码,这些代码被广泛使用并针对 Java 进行了专业优化。如果您假设复杂或迟钝的代码更“专家”,您可能会感到失望。 ;)

【讨论】:

  • 自相矛盾的是,至少对于 Java 的设计而言,许多初学者可能会编写出更快的代码,因为他们面临的犯错“门”更少,而是采用他们认为有意义的方法。当然,代码清晰度(或者更糟糕的是,代码重用)会受到很大影响,而且直到很久以后才被考虑到。对于像 C++ 这样的语言,我经常看到相反的情况 - 初学者在整个地方复制内容多达 3-4 次,返回大型对象的副本等,而专业人士则选择间接或至少在写入时复制。
  • @PeterLawrey 我承认你刚才说的是真的,但是你有没有遇到过我刚刚发布的任何这样的优化,而不是像死代码消除、强度降低和各种循环优化这样的普通优化等等。而且我觉得知道编译器如何实现所有类是一项艰巨的任务,它曾经在现实世界中使用软件应用程序完成过。
  • @jerisalan javac 编译器几乎不做任何优化是毫无价值的,因此尝试针对编译器所做的事情优化您的代码不太可能有帮助。尝试再次猜测 JVM 将优化什么并不是一项简单的任务,因为大多数简单、易于应用的模式已经由 JVM 执行。
  • 您可能会发现这些库很有趣。它们都非常先进,即使你有十年的 Java 经验也可能没有多大意义。 vanillajava.blogspot.co.uk/2012/02/…
  • @PeterLawrey 是一个非常有趣的集合......毫无疑问,多年来我会发疯地理解其中所涉及的复杂性......但感谢你帮助我了解和学习今天知道的东西 :D :)
【解决方案2】:

我不建议任何人尝试猜测 JVM 本身内置的优化器。它根据您的代码执行方式使用运行时统计信息来动态优化您的代码。

我建议您编写尽可能干净、最简单的代码,并让 JVM 在运行时进行优化。如果您有问题,请分析代码以找到它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2017-05-08
    • 2011-05-26
    • 2011-04-23
    • 2010-12-02
    • 2014-01-10
    • 1970-01-01
    相关资源
    最近更新 更多