我有一个多线程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;
}
答案 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;
}
}
但是请注意,如果多个线程将使用共享库,则需要一定级别的synchronization或concurrency限制。