Java函数/方法内存管理



我有一些关于Jvm内存管理的问题:

1(如果两个方法或函数在后台连续运行,是否有可能发现哪一个占用了更多内存?

2( 如果这是可能的,那么我们可以使用Java反射来做到这一点吗?

我不确定"占用更多内存">是什么意思,但肯定可以找到哪个分配了更多内存。这既可以从应用程序内部完成,也可以从外部完成。

应用程序内部

private static final com.sun.management.ThreadMXBean threadMXBean =
(com.sun.management.ThreadMXBean) ManagementFactory.getThreadMXBean();
public void myAllocatingMethod() {
long before = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());
// ... some business logic that allocates memory ...
byte[] array = new byte[500000];
long after = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());
System.out.println("Method allocated " + (after - before) + " bytes");
}

注意:这会计算在当前线程上下文中分配的内存。如果一个方法产生新的线程或在线程池中执行一些代码,那么如何将分配的内存分配给特定的方法并不明显。

应用程序之外

使用像Java任务控制这样的分配评测器。

p。S.Java反射与内存测量无关。

最新更新