我的java应用程序工作了1天(我使用不同的lib处理照片,比如ffmpeg、javacv、javacpp),然后我看到我的应用程序使用9,5 my。
我不明白为什么我的应用程序使用这么多内存。
我设置了-Xmx6G
在VisualVM中,我看到堆空间大小为188M
元空间使用141米
也许这会有帮助
我读到的文章说Java使用的RAM比堆空间多,因为有JIT、堆空间、元空间、代码、ant等,但是9.5Gb在我的脑海中占了很多
编辑:
发布于 2021-07-16 12:41:52
我在一定程度上解决了这个问题,部分感谢塞缪尔·奥德的评论。(但是不管堆spase使用的是稳定的125 M,metaspace 100 m,java进程使用1,4 use )
所以问题是在代码中,我从视频中获得帧。
我的旧密码:
FFmpegFrameGrabber g = new FFmpegFrameGrabber(file);
Java2DFrameConverter bimConverter = new Java2DFrameConverter();
g.start();
Frame grab = g.grab();
BufferedImage imageFrame = bimConverter.convert(grab);
g.stop();我甚至无法思考,直到我检查了所有可能的类,FFmpegFrameGrabber,Java2DFrameConverter,Frame是自动关闭的,当实例时,我们需要每个close()调用。
在代码的某些部分,不关闭InputStream
好代码:
FFmpegFrameGrabber g = new FFmpegFrameGrabber(file);
Java2DFrameConverter bimConverter = new Java2DFrameConverter();
g.start();
Frame grab = g.grab();
BufferedImage imageFrame = bimConverter.convert(grab);
g.stop();
g.close();
bimConverter.close();
grab.close();https://stackoverflow.com/questions/68335074
复制相似问题