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 进程提供更多内存。

4

1 回答 1

3

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

于 2012-05-23T12:51:27.810 回答