就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,访问帮助中心 /help/reopen-questions 以获得指导。
为什么 Java 与 Python 等其他解释语言相比具有更好的性能?我知道这可能与它预先编译有关,但是并发性又如何呢?
JVM 如何能够在并发程序上表现得更好,而解释性语言必须处理诸如全局解释器锁定等问题,这确实会减慢速度?
这是一个非常有趣的问题,但我不确定是否有一个简单的方法来回答它。如今,JVM 使用一系列高度积极的优化来尝试提高性能。以下是一些:
动态编译: 大多数优秀的 JVM 都可以将字节码直接动态编译为机器代码,然后以本机速度执行。
多态内联缓存: 许多 JVM 使用内联缓存 http://en.wikipedia.org/wiki/Inline_caching 通过记住过去调用过哪些函数来尝试提高方法分派的性能。
静态类型: 由于 Java 是静态类型的,因此字节码指令很少需要对对象的类型进行昂贵的内省来确定如何对其执行操作。可以静态计算字段偏移量,也可以预先计算虚拟函数表中的方法索引。将此与 JavaScript 等语言进行对比,后者没有静态类型并且更难解释。
垃圾收集: JVM 垃圾收集器经过优化,可以有效地分配和释放对象。它结合使用标记和清除以及停止和复制技术,使大多数分配速度非常快,并且可以轻松快速地回收大量内存。
已知的瓶颈: 一些 JVM 实现会自动将额外的代码插入到每段已编译/解释的代码中,以定期检查 VM 并确定它们是否可以继续运行,而不是使用巨大的 VM 锁。这样,如果 JVM 仅需要在少数线程中执行垃圾收集,它可以在其他线程运行时执行此操作。如果需要执行停止世界操作,则只会在线程到达特定点时发生,这意味着简单的操作不必持续检查虚拟机状态。
还有很多很多我可能不知道的优化,但我希望这可以帮助您找到答案!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)