【发布时间】:2021-07-08 03:19:45
【问题描述】:
是否可以计算每个线程的内存消耗?假设我将任务分为 4 个线程,那么我想知道每个线程消耗了多少内存?我需要它来了解我的线程的平均和峰值内存使用情况。
【问题讨论】:
-
我认为不可能计算每个线程的内存消耗。线程通常从共享内存中消耗。因此线程不拥有任何特定的内存。如果任何线程在具有变量的作用域上工作,内存分析器将帮助您获取该信息。
-
@papaya 我认为这是可能的。至少是一个近似值。如果您知道线程是什么,您就知道它创建了多少对象。可以创建对象大小。静态实例的内存和 JVM 开销可以计入第一个线程。
-
@AndiCover 确实如此,就像我在回答中所说的那样,只有当线程开始从共享内存关联/使用时才会出现问题。除此之外,使用内存分析器非常简单。由于 OP 没有提到 JVM 版本等。这可能会有所帮助。 docs.oracle.com/javase/6/docs/jre/api/management/extension/com/…
-
@AndiCover 你可以记录它创建了哪些对象以及它们的内存占用,但这并没有说明线程使用了哪些对象。正如木瓜正确所说,堆内存是共享>内存第一个使用
"foo"的线程将是字符串对象的创建者,所有其他线程将使用相同的对象,即使创建者有停止使用它,甚至当创建者不再存在时。线程之间可以进行任意对象交换,这些对象通常是持久化的对象,临时本地对象最先被垃圾回收 -
@AndiCover 怎么能做到这一点?
标签: java multithreading memory memory-management