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

时间:2012-05-23 12:50:38

标签: 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.getRuntime().exec(command, null, null);

它将启动ffmpeg并将video.mov的前20秒转换为video.flv。但有时使用高分辨率视频时,会抛出OutOfMemory。显然ffmpeg占用了太多内存。

我的问题如下 - 外部进程是从Java从Java堆空间还是从OS内存中获取内存开始的?

知道这一点,我将知道如何调整-Xms和-Xmx参数。如果外部进程从OS内存中获取,我将使用低值保留-Xms和-Xmx(使操作系统具有更多可用内存)。否则,我将-Xms和-Xmx设置为高值,为Java进程提供更多内存。

1 个答案:

答案 0 :(得分:3)

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