我正在編寫一個程序,現在基本上是這樣的:在隨機時間到達每條道路上的汽車有4路停車。每條道路都服務於FCFS,並且交叉路口管理爲循環賽風格,每次有1輛車過境。每輛等車都是一條線。我已經獲得線程同步和算法工作沒有問題。我無法弄清楚的問題是如何防止錯誤:OutOfMemoryError:無法創建新的本地線程。我意識到這是由於堆(堆棧?我總是讓它們切換)變滿。我找不到一種方法來確保執行的線程由垃圾收集器正確管理,並且不會在執行後在內存中徘徊。我試着用軟引用來設置我的隊列(每條「汽車線程的道路」),並將任何硬引用歸於無效。這裏的任何人都有這方面的經驗!?謝謝!!!java線程內存管理問題
1
A
回答
0
您是否試過使用ThreadPool?
您可以從Java 5開始創建一個ThreadPool,其中您決定了Vm應爲您初始化多少個線程算法。線程被創建並重用。
我有一個類似的問題。線程不會被GarbageCollector刪除/刪除,並以某種方式永遠活着。
2
「OutOfMemoryError:無法創建新的本地線程」是否而不是是指堆內存。它不會幫助您清零引用或使用軟/弱引用。此外,增加堆的大小隻會讓事情變得更糟。
Java爲線程堆棧使用本地內存。每次啓動一個線程時,都會在JVM堆外部分配一個新的堆棧。直到線程終止,堆棧纔會被釋放。考慮使用較少的併發線程(例如,您可以通過使用ThreadPoolExecutor來控制數量),或者可以減小堆棧大小(使用-Xss {size} k)
另請參閱this post,其中詳細說明了許多類型的內存不足錯誤。
0
這隻會發生,如果你有太多的運行線程。 (不只是線程的引用)像@Markus,我建議您切換到像ExecutionService一個線程池,因爲它會管理線程的創建和它的作品。
BTW:併發庫的歷史可以追溯到1998年,但僅包含在Java 5.0中(2005年),所以如果你必須有一箇舊版本,你可以使用的或者下行移植原始庫。
相關問題
- 1. 內存管理的Java線程
- 2. 內存管理問題
- 3. iPhone - 內存管理問題?
- 4. NSTimer內存管理問題
- 5. 內存管理問題
- 6. NSIndexPath內存管理問題
- 7. EXC_BAD_ACCESS內存管理問題
- 8. 內存管理問題
- 9. EXC_BAD_ACCESS - 內存管理問題
- 10. UIViewController內存管理/問題?
- 11. iPhone - 內存管理問題
- 12. 內存管理問題
- 13. 內存管理問題
- 14. SQLite +內存管理問題
- 15. Android內存管理問題
- 16. iPhone內存管理問題
- 17. 內存管理問題
- 18. 內存管理問題
- 19. 線程管理問題!
- 20. Java線程管理
- 21. 線程的內存問題
- 22. 每線程內存管理在C#
- 23. iOS內存管理/持久性問題
- 24. Objective-C內存管理問題
- 25. iphone內存管理奇怪的問題
- 26. iPhone:內存管理新手問題
- 27. 內存管理問題:釋放對象
- 28. ScrollView太慢 - 內存管理問題?
- 29. addAnnotations問題(內存管理也許?)
- 30. Objective-C內存管理問題,NSMutableArray
一些代碼顯示你如何處理胎面將不勝感激。 – 2010-12-06 07:57:45