多线程应用程序中的静态方法和数据成员可以降低内存使用量?

时间:2018-08-01 17:28:37

标签: java multithreading

我有一个多线程Java应用程序,需要使用一个库来获取时区。我正在使用的时区库为Timeshape

根据其首页,它大约需要180 MB的内存,这是很大的数量。

我正在尝试尽可能减少内存使用,因此我使用static方法创建了以下类,并且还将TimeZoneEngine设置为静态数据成员。现在,如果每个线程都继续调用getTimezone,那么将使用相同的引擎,并且不会创建新的引擎,我的假设正确吗?具有此静态方法和静态数据成员是节省内存的好方法吗?

public class TimeZone {

    static TimeZoneEngine engine = TimeZoneEngine.initialize();

    public static String getTimezone(double lat, double lon) {
        String timeZone = null;

        Optional<ZoneId> zoneId = engine.query(lat, lon);

        if (zoneId.isPresent()) {
            timeZone = zoneId.get().toString();
        }

        return timeZone;
    }

1 个答案:

答案 0 :(得分:0)

使用静态方法是减少内存占用的常用方法。该方法已在Singleton Pattern中进行了编码。另一种非静态方法是将共享对象传递给使用它的对象的构造函数。例如:

public class TimezoneService {
    public String getTimezone(double lat, double lon) { /* ... */ }
}

public class Foo {

    private final TimezoneService timezoneService;

    public Foo(TimezoneService timezoneService) {
        this.timezoneService = timezoneService;
    }

}

但是请注意,如果多个线程将使用共享库,则需要一定级别的synchronizationconcurrency限制。