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進程提供更多內存。