[英]Find out how much RAM is used by Thread
我想知道如何找出某些線程消耗了多少RAM。 在我的程序中有大約15個類,每個類都在自己的Thread中運行。
那么我如何才能發現Thread1,Thread2,... Thread15使用了多少RAM? 這有什么方法嗎?
謝謝你的回復!
內存使用情況取決於JVM版本和操作系統。
所有線程共享一個公共堆。 它們都有自己的堆棧,通常為512KB。
有幾種方法可以查看每個線程內存的使用情況。 首先,檢查一下:
簡短的回答是所有線程都共享所有動態分配的內存(堆),除非您使用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.