我使用Spring Batch编写了一个应用程序。我可以看到VisualVM的堆大小约为22 MB。但是,当我使用Process Explorer(在Windows上)查看它使用了多少内存时,差别很大(专用字节 - 71560K和工作集 - 80388K)。怎么解释这个? 使用这种记忆的其他事情是什么?
由于
答案 0 :(得分:5)
有共享库,Thread的堆栈,perm gen,直接内存,内存映射文件。
但是,JVM在启动时分配最大堆大小。使用量并不重要。
答案 1 :(得分:2)
不要忘记原生空间(堆栈)!堆只表示对象,线程/基元占用额外的内存。 AFAIK,一旦进程占用内存,即使内容可能被垃圾收集,它有时也不会被释放回操作系统。另外,我不确定VisualVM,但是eclipse MAT只显示“当前”的堆(如果GC在那个时间点运行,则不会进行垃圾收集)。您可能还想查看jstat。