我们在Jboss上运行了一个j2ee应用程序,我们希望监视它的内存使用情况.目前我们使用以下代码
System.gc();
Runtime rt = Runtime.getRuntime();
long usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
logger.information(this, "memory usage" + usedMB);
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.这意味着它显示了与现实相对应的记忆曲线.当我们从DB创建一个大的xml文件时,曲线会上升,在提取完成后,它会下降.

一位顾问告诉我们,明确调用gc()是错误的,"让jvm决定何时运行gc".基本上他的论点与此处讨论的相同.但我还是不明白:
有没有办法找出我的java线程在VM中占用多少内存?
例如,使用堆栈跟踪转储或其他一些方法.
谢谢