gpt4 book ai didi

java - 多线程应用程序中的静态方法和数据成员降低内存使用率?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:39 24 4
gpt4 key购买 nike

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

根据其主页,它需要大约 180 MB 的内存,这是一个很大的数目。

我试图尽可能减少内存使用,所以我用静态方法创建了以下类,并将 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;
}

最佳答案

使用静态方法是减少内存占用的常用方法。此方法已编入 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;
}

}

但是请注意,如果多个线程将使用共享对象,则 synchronization 的某个级别或 concurrency需要限制。

关于java - 多线程应用程序中的静态方法和数据成员降低内存使用率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51639087/

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