gpt4 book ai didi

java - 方法优化

转载 作者:行者123 更新时间:2023-12-01 09:26:11 27 4
gpt4 key购买 nike

哪一个会更快,为什么?

public void increment{
synchronized(this){
i++;
}
}

public synchronized void increment(){
I++;
}

方法内联会改进第二个选项吗?

最佳答案

差异不太可能重要或明显,但第二个示例可能更快。为什么?在 Oracle/OpenJDK 中,方法使用的字节代码越少,可以优化的程度就越高。内联。

何时可以优化方法有许多阈值,这些阈值基于字节代码的字节数。第二个示例使用较少的字节代码,因此可能可以进行更多优化。

这些优化之一是转义分析,它可以消除线程本地对象的synchronized的使用。这会让它变得更快。转义分析的阈值默认是小于150字节(内联后)的方法。您可能会看到第一个解决方案使方法略多于 150 个字节,而第二个解决方案略低于 150 个字节的情况。

注意:

  • 不要在此基础上编写代码,不同之处微不足道。代码清晰性要重要得多。
  • 如果性能确实很重要,那么使用 AtomicInteger 这样的替代方案可能会快一个数量级。 (始终如一,不仅仅是在极少数情况下)
  • 顺便说一句,并发库使用很少的 assert 语句,不是因为它们没有被优化,而是因为它们仍然计入字节码的大小,并且在某些情况下间接减慢了它们的使用该代码不是最佳的。 (我的这个说法应该有引用资料,但我没找到)

关于java - 方法优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39814706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com