2012-10-08 75 views
2

我正在處理客戶端(用戶)擁有控制權來創建新線程並殺死它們的應用程序。該應用程序基於Java。內存不足:無法創建新的本地線程

在其中一種情況下,用戶創建多個線程並殺死它們並創建新線程並繼續。一段時間後,OutofMemoryException會彈出。我認爲這與線程堆棧問題有關。所以我將線程堆棧XSS從1024KB減少到了512KB,並且將Java堆大小從Xms 256mb XmX 1024mb減少到了Xms 256mb Xmx 512mb。

我也在使用yourkit來分析應用程序的內存,只是爲了看它是否從堆大小溢出。但它似乎沒關係..線程創建並殺死好吧。

這是8GB RAM的Windows 7機器

我不知道,可能是別的什麼導致這種異常?

+1

你是如何殺死那些線程?你確定你是「加入」他們所有? – Isaac

+0

我敢打賭,這是你的代碼中的錯誤,你應該發佈一些;) –

+0

沒有代碼,它很難回答。你如何殺死線程?安全的方法是從public void run()方法返回。 – Aubin

回答

0

這有3個主要原因。

  1. 內存泄漏
  2. 低效率的算法
  3. 堆大小太小

這些通常可以通過以下確定:

  1. 內存泄漏 - 取消引用不需要的對象
  2. 低效算法 - 提供更多內存夠的算法(有時少用爲好)
  3. 堆大小 - 增加堆大小
相關問題