java - 这是在 java 中执行以下任务的最佳方法

标签 java static heap-memory

我的应用程序中有超过 20 个常用方法。我想将这 20 个方法移至一个公共(public)类中。

这里我的疑问是,定义所有方法都是静态或普通方法,并创建一个全局对象来访问该普通方法。

class Common {

public String method1() {........}
public String method2() {........}
public String method3() {........}
public String method4() {........}
public String method5() {........}
...

}

创建对象。

class CommonService {
    private static Common common;

    public static Common getCommon() {
    if(null == common) {
    common = new common();
    }
    return common;
    }
}

如果我们使用静态方式创建所有方法,则所有 20 个方法都存储在堆的 PermGen 部分中。

但是如果我们按照上面的方法,就只能创建一个对象并将其存储在java堆中。

请说明哪一种是最好的方法。

最佳答案

If we create all the methods using static means, all 20 methods are stored in PermGen section of the heap.

方法不是数据,而是代码。代码的存储位置并不取决于方法是否接受隐式 this 参数。如果使用单例方法,方法代码仍然会占用存储空间,并且堆上还会有一个实例。

但是,以上所有内容都是无关紧要的,您正在关注设计中完全错误的方面。重要的是这个决定将如何影响使用这些方法的代码:

  • 静态方法很简单,是纯函数(不依赖于任何外部状态)的绝佳选择;
  • 单例允许多态性,因此使方法更容易模拟测试。

关于java - 这是在 java 中执行以下任务的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495407/

相关文章:

swift - 如何调用具有与此类同名函数的类的静态方法?

generics - 从dart中的静态函数访问类中的类型参数的解决方法

java - OQL 查询以查找 session 中引用的给定类的所有实例和子实例

java - hive 中的python udf

java - 使用日历开始日期和结束日期填充 jtable

c++ - 何时以及为何将静态与 constexpr 结合使用?

c++ - C++ 线程之间的内存共享

java - 程序无限循环

Java编译速度

c++ - 使用 new 运算符静态分配对象