2012-05-23 19 views
3

如果我運行下面的行哪些內存用於從java運行的外部進程 - java堆空間或操作系統內存?

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到video.flv的前20秒。但有時在高分辨率的視頻中,會拋出OutOfMemory。顯然ffmpeg需要太多內存。

我的問題是以下內容 - 外部進程是從java從java堆空間還是從OS內存中獲取內存開始的?

知道了這一點,我會知道如何調整-Xms和-Xmx參數。如果外部進程佔用操作系統內存,我會將-Xms和-Xmx保留爲低值(讓操作系統擁有更多空閒內存)。否則,我會將-Xms和-Xmx設置爲較高值,從而爲Java進程提供更多內存。

回答

3

您正在啓動一個單獨的OS級本機進程 - 它與JVM內存,堆或其他內容無關。