簡體   English   中英

找出Thread使用了多少RAM

[英]Find out how much RAM is used by Thread

我想知道如何找出某些線程消耗了多少RAM。 在我的程序中有大約15個類,每個類都在自己的Thread中運行。

那么我如何才能發現Thread1,Thread2,... Thread15使用了多少RAM? 這有什么方法嗎?

謝謝你的回復!

內存使用情況取決於JVM版本和操作系統。

所有線程共享一個公共堆。 它們都有自己的堆棧,通常為512KB。

有幾種方法可以查看每個線程內存的使用情況。 首先,檢查一下:

http://docs.oracle.com/javase/6/docs/jre/api/management/extension/com/sun/management/ThreadMXBean.html#getThreadAllocatedBytes%28long%29

簡短的回答是所有線程都共享所有動態分配的內存(堆),除非您使用Java的ThreadLocal類聲明僅對該線程本地的變量。

實際上,線程之間共享數據的傳統Java內存模型 (當不使用ThreadLocal時)使得線程對於跨線程的內存共享非常強大。

正如sk4l所提到的,如果您的JVM支持它,則會有一個ThreadMXBean方法的getThreadAllocatedBytes方法,但請記住,這通常只是一個近似值。

最后,Oracle JDK和OpenJDK的最新版本包括jconsole和JDK 6u7,后來包括VisualVM ,您可以使用它們附加到您的進程並查看有關內存和線程的信息。

所有線程共享所有對象,因此沒有對象擁有。

你可以做的是使用一個內存分析器,例如VisualVM,它可以免費使用JDK,並查看每個類使用了多少(深度大,不淺的大小),這將告訴你你想知道什么。

我不認為這是可能的,導致所有線程共享相同的內存堆。 線程是一個正在運行的實體,但不是數據所有者。

暫無
暫無

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

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