java启动需要多少内存?

java启动需要多少内存?,java,memory,out-of-memory,qsub,sungridengine,Java,Memory,Out Of Memory,Qsub,Sungridengine,我在使用内存控件的环境中运行java时遇到一些问题。我的用例是SunGridEngine(SGE),但我可以使用ulimit进行复制 当我尝试在内存有限制的情况下运行java时(-Xmx),我发现我仍然需要从ulimit允许更大的内存量 evaben@evaben:~$ (ulimit -v 1000000; java -Xmx500m -version; ) Error occurred during initialization of VM Could not allocate metasp

我在使用内存控件的环境中运行java时遇到一些问题。我的用例是SunGridEngine(SGE),但我可以使用ulimit进行复制

当我尝试在内存有限制的情况下运行java时(-Xmx),我发现我仍然需要从ulimit允许更大的内存量

evaben@evaben:~$ (ulimit -v 1000000; java -Xmx500m -version; )
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
evaben@evaben:~$ (ulimit -v 2000000; java -Xmx500m -version; )
Error occurred during initialization of VM
Could not allocate metaspace: 1073741824 bytes
evaben@evaben:~$ (ulimit -v 4000000; java -Xmx500m -version; )
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
evaben@evaben:~$ 
因此,500米的-Xmx距离ulimit需要4G的空间。我知道Xmx只限制了java内存使用的某些方面,可能只有堆。但3.5G或700%的开销似乎过高

我已经尝试了一些策略,我看到上面的java正在映射多个大的块,可能来自不同的线程或子进程

strace -f -e memory java -Xmx500M -version 2>&1 1>/dev/null  | grep mmap | grep ENOMEM | wc -l
96

strace -f -e memory java -Xmx500M -version 2>&1 1>/dev/null  | grep mmap | awk '$1 == "[pid"{print $2}' | sort | uniq -c 
> many pids mmapping
/bin/time只报告RSS,在本例中约为30 MB。是否有一种简单的方法显示alloc/mmap请求总数

为什么java需要这么多内存?有没有办法让java运行时所需的内存分配更少