簡體   English   中英

垃圾收集線程太多

[英]Too many Garbage collection threads

我正在使用java開發一個軟件,它在接收事件(來自傳感器)時創建一個線程。 這些線程的生存時間非常短(<1秒)
傳感器發送 最多10個事件/分鍾。 這個程序在大多數時間都可以正常工作。 但有一段時間它會掛起。
我看看eclipse調試器並發現有很多線程,其中大多數是"Thread[garbage collected]" (大約800個線程@ _ @)

我不知道該bug是否是由我的代碼中的動態創建線程或其他錯誤引起的?

EDIT:
問題確實是由創建太多線程引起的。 我已經用時間戳記錄了所有傳感器的事件,並且它創建了大約1200 events/minute某些點(該死的!)。
我還寫了一個小的java程序,它創建了與posible一樣多的線程。 ~4100th thread (好吧,木制電腦),jvm崩潰了。 它不像我的應用程序那樣掛起: - ?
因此,我認為動態創建線程時可能存在(可能)罕見的情況,並導致垃圾收集線程掛起?

在此輸入圖像描述

不要為收到的每個事件創建新線程。 而是使用java.util.concurrent包中的類。

創建一個ExecutorService (使用類Executors一個靜態方法)並將處理事件的作業提交給ExecutorService ExecutorService是一個線程池,可以為您管理線程。

我在NetBeans中遇到了類似的問題。 過了一會兒,程序會掛起很多(可能是500個)掛起的線程。 但是,當在調試器外部運行時它工作得很好。 我不認為我在外面跑步的時候曾經有超過幾百個線程在運行,但程序確實傾向於以激烈的速度啟動它們。 我懷疑調試器從不關閉一個線程,只能處理這么多。

到目前為止,我的經驗是JVM很好地處理了大量快速啟動和停止的線程,但是NetBeans調試器(現在的幾個版本,6個版本之一)沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM