0
我試圖將一分鐘內收到的類消息的所有JMS對象存儲在樹形圖中,並將其作爲密鑰的精確時間。完成一分鐘後,我希望序列化地圖並將字節[]返回給另一個類。同時我創建一個新的樹形圖來存儲下一組JMS消息一分鐘。序列化每分鐘的JMS消息的樹形圖
public class StoreMessage {
private static long start_nanotime = System.nanoTime();
private static Thread thisThread = Thread.currentThread();
private static int timeToRun = 60000; // 1 minute
private static byte[] b = null;
public static Map<Long, Message> map1 = new TreeMap<Long, Message>();
public static byte[] store(Message message) {
new Thread(new Runnable() {
public void run() {
try {
sleep(timeToRun);
thisThread.interrupt();
b = serializer.serialize(map1);
new TreeMap<Long, Message>();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
while (!Thread.interrupted()) {
long precise_time = TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()) + (System.nanoTime()
- start_nanotime);
map1.put(precise_time, message);
}
return b;
}
}
此代碼是一些如何不工作。爲什麼?它給我錯誤java.lang.OutOfMemoryError:Java堆空間另外我注意到它一直只寫一條消息到地圖,即如果消息是「嗨」,「對你很好的一天」 - 這些是兩個jms消息; StoreMessage類一次接收一條消息......它會首先收到「hi」,一旦處理完這條消息,它就會檢索下一條消息。但是我注意到,整整一分鐘,當線程沒有中斷時,它只會將第一條消息寫入地圖並給出錯誤。我如何解決這些問題?