-1

良い一日!Java スレッドのメモリ使用量の取得に問題があります。私の調査により、ThreadMxBean ライブラリにたどり着きました。の javadoc にThreadMXBean#setThreadAllocatedMemoryEnabledよると、getThreadAllocatedBytesスレッドのメモリを取得できるメソッドがあるはずです。ただし、このクラスのメソッドは見つかりませんでしたが、言及されたドキュメントに記載されている他のメソッドが存在します。

getCurrentThreadCpuTime()isThreadCpuTimeEnabled()私のコードに示されています。

import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MalformedObjectNameException;
import javax.management.ReflectionException;

class TwoThreadsTest {
    public static void main (String[] args) throws Exception {
        new Coding("Jamaica").start();
        ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
        long b = threadBean.getCurrentThreadCpuTime();
        boolean bool= threadBean.isThreadCpuTimeEnabled();
        System.out.println(bool);
    }
}
4

1 に答える 1

5

java.lang.management.ThreadMXBeanメソッドが interface で実際に定義されている場合、コードはインターフェイスを使用していますcom.sun.management.ThreadMXBean。そしてあなたのリンクは後者を参照しています。

編集:

「糸の記憶」はありません。すべてのスレッドがプロセス内の同じヒープを共有し、スレッド用のプライベート メモリはありません。メソッド getThreadAllocatedBytes() が返すのは、スレッドによって割り当てられたバイト数です。私が理解していることから、それは、もはや参照されておらず、ガベージコレクターによって再利用されている可能性がある、またはすでに再利用されている、割り当てられたバイトもカウントすることを意味します。

したがって、これはスレッドによるメモリ割り当ての尺度であり、メモリ使用量の尺度ではありません。

于 2013-02-01T01:44:14.050 に答える