哪个内存用于从java-java堆空间或操作系统内存运行的外部进程?

哪个内存用于从java-java堆空间或操作系统内存运行的外部进程?,java,memory,heap,Java,Memory,Heap,如果我运行以下行 final String[] command = new String[]{ffmpeg -y -i /home/user/video.mov -ss 0 -t 20 -vcodec libx264 -vpre slow -crf 18 -f flv -bf 0 -g 10 -vsync 1 -r 30 -an -threads 0 -s 1920x1080 /home/user/video0.flv}; final Process process = Runtime.get

如果我运行以下行

final String[] command = new String[]{ffmpeg -y -i /home/user/video.mov -ss 0 -t 20 -vcodec libx264 -vpre slow -crf 18 -f flv -bf 0 -g 10 -vsync 1 -r 30 -an -threads 0 -s 1920x1080 /home/user/video0.flv};

final Process process = Runtime.getRuntime().exec(command, null, null);
它将启动ffmpeg并将video.mov的前20秒转换为video.flv。但有时高分辨率视频会抛出OutOfMemory。显然ffmpeg占用了太多内存

我的问题是,从java启动的外部进程是从java堆空间还是从操作系统内存获取内存?


知道了这一点,我将知道如何调整-Xms和-Xmx参数。如果外部进程占用OS内存,我将使用较低的值保留-Xms和-Xmx(让OS有更多的可用内存)。否则,我会将-Xms和-Xmx设置为高值,给Java进程更多的内存。

您正在启动一个单独的操作系统级本机进程——它与JVM内存、堆或其他无关