Java 进程使用的总内存和堆大小

2022-09-04 22:47:18

我使用Spring Batch编写了一个应用程序。我可以看到使用VisualVM,堆大小约为22 MB。但是,当我使用进程资源管理器(在Windows上)查看它使用了多少内存时,差异很大(专用字节 - 71560K和工作集 - 80388K)。如何解释这一点?还有哪些其他东西可以使用此内存?

谢谢


答案 1

有共享库,线程堆栈,烫发生成,直接内存,内存映射文件。

但是,JVM 在启动时分配最大堆大小。使用量并不重要。


答案 2

不要忘记原生空间(堆栈)!堆仅表示对象,线程/基元占用额外的内存。同样是AFAIK,一旦进程占用了内存,即使内容可能被垃圾回收,它有时也不会释放回操作系统。另外,我不确定VisualVM,但eclipse MAT只显示“当前”的堆(如果GC在那个时间点运行,则不会被垃圾回收)。您可能还想看看jstat。


推荐