从Java运行的外部进程使用哪种内存——Java堆空间还是操作系统内存?

3
如果我运行以下代码行:
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参数。 如果外部进程从操作系统内存中获取,则我将保留-Xms和-Xmx的低值(使操作系统具有更多的可用内存)。 否则,我将设置-Xms和-Xmx为高值,给Java进程更多的内存。
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接