Java: getInstance() 单例性能

标签 java performance

我很难找到以对性能最友好的方式使用单例类的正确方法。我有 3 种方法,也许有人可以向我解释最有效的方法:

1:

public functionA() {
    SingletonClassA.getInstance().callA();
    SingletonClassA.getInstance().callB();
    SingletonClassA.getInstance().callC();
    SingletonClassA.getInstance().callD();
    SingletonClassA.getInstance().callE();
}

2.

public functionA() {
    SingletonClassA tmp = SingletonClassA.getInstance();
    tmp.callA();
    tmp.callB();
    tmp.callC();
    tmp.callD();
    tmp.callE();
}

3.

SingletonClassA tmp = SingletonClassA.getInstance();       
public functionA() {
    tmp.callA();
    tmp.callB();
    tmp.callC();
    tmp.callD();
    tmp.callE();
}

我看到使用方法 1 的代码,但我认为更好的方法是 2(如果其他函数也在使用 SingletonClassA,则为 3)。

我来自 c 开发,但我对 Java 及其引用资料了解不多。我只是希望它不消耗太多内存并且执行速度快。

最佳答案

在谈论性能时永远不要思考(或正确的措辞:假设/相信)。

相反:阅读有关 Java 即时编译器及其功能的信息。令人惊讶的是:大多数时候,JIT 会将像您这样的微观优化想法……付诸东流。如果您确实遇到问题,请只考虑性能问题。然后:学习使用 Java 分析器来衡量正在发生的事情。

含义:关注SOLID设计;编写可读、可维护的代码……通常会产生“好”的代码;并且比在 Java 中花时间在这些事情上更有意义。此外:如果您的代码是可维护的,那么为了解决某些性能问题而进行更改会容易得多。

(是的,应该避免犯愚蠢的错误;但第一个也是最大的错误是假设这样做与那样对性能有好/坏的影响)。

旁注:考虑不使用单例类,而是使用单个实例枚举类。

关于Java: getInstance() 单例性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36763981/

相关文章:

java - Lambda 表达式和匿名类之间的实现差异/优化

java - 如何检查Java Runtime Enviroment中是否存在具有指定类名的重复类?

与 simplerepository 相比,使用 activerecord 的 Subsonic linq 速度非常慢

jquery - 组合 :visible and :enabled 的 jQuery 过滤器

java - 在 Java 中逐行读取大型 JSON 文件的快速高效方法

java - LibGDX 仅渲染(如果相机看到它)

java - 搜索从@MappedSuperclass 扩展的所有表

performance - 为什么 Haskell 函数执行时间测量与 ghc 计时不同?

Javascript 在 IE 中工作正常,但速度很慢,为什么?

java - 如何将 HttpServletResponse 响应获取到 Spring Boot 的 REST Controller 中?