Доброе утро, В настоящее время я разрабатываю веб-приложение Java, которое предоставляет интерфейс веб-службы. Чтобы сохранить глобальный объект в памяти, я использую следующий класс как Singleton:
public class SingletonMap {
private static final SingletonMap instance = new SingletonMap();
private static HashMap couponMap = null;
private static long creationTime;
private SingletonMap() {
creationTime = System.currentTimeMillis();
couponMap = new HashMap();
}
public static synchronized SingletonMap getInstance() {
return instance;
}
public static long getCreationTime() {
return creationTime;
}
}
Я использую вышеупомянутый класс, чтобы иметь один и тот же экземпляр HashMap для всех потоков веб-службы. Класс веб-службы, поддерживающий объект SingletonMap, выглядит следующим образом:
@WebService()
public class ETL_WS {
private String TOMCAT_TEMP_DIR;
private final int BUFFER_SIZE = 10000000;
private static SingletonMap couponMap;
private static SingletonProductMap productCategoryMap;
private String dbTable = "user_preferences";
public ETL_WS() {
Context context = null;
try {
context = (Context) new InitialContext().lookup("java:comp/env");
this.TOMCAT_TEMP_DIR = (String) context.lookup("FILE_UPLOAD_TEMP_DIR");
}catch(NamingException e) {
System.err.println(e.getMessage());
}
public long getCouponMapCreationTime() {
return couponMap.getCreationTime();
}
}
Метод getCouponMapCreationTime() используется для проверки того, что все потоки веб-службы обращаются к одному и тому же объекту. Верен ли описанный выше подход? Как насчет накладных расходов на производительность? Как вы думаете, мне нужны свойства Singleton, или я могу просто использовать статическую HashMap для всех потоков? Если я использую статический HashMap, будет ли он собирать мусор, если ни один поток не активен?
Спасибо за ваше время.