我有一个小型的 java 控制台应用程序,我想在内存使用方面进行优化。它在 Xmx 设置为仅 64MB 的情况下运行。根据不同的监控工具(htop、ps、pmap、Dynatrace),进程的总体内存使用情况显示值超过 250MB。我主要在 Ubuntu 18 上运行它(也在其他操作系统上进行了测试)。
我使用 -XX:NativeMemoryTracking java param 和 jcmd 的本机内存跟踪来找出为什么在堆之外使用了这么多内存。
NMT 在汇总时显示的值或多或少与 htop 作为常驻内存显示的值相同。
神经机器翻译:
Total: reserved=1518873KB, committed=255877KB
Run Code Online (Sandbox Code Playgroud)
顶部:
我使用了几个 JVM 参数来减少本机内存消耗(减少堆栈大小、将 GC 更改为串行、类数据共享等)。根据 NMT(malloced 和 mmaped),保留和提交的内存指标总共下降了约 50MB。
神经机器翻译:
Total: reserved=1475110KB, committed=209218KB
Run Code Online (Sandbox Code Playgroud)
我使用的所有工具(htop、ps、pmap、Dynatrace)都没有显示任何差异。该进程使用的总内存仍然是 250MB。