首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java使用的内存比VisualVM显示的要多

Java使用的内存比VisualVM显示的要多
EN

Stack Overflow用户
提问于 2021-07-11 09:46:36
回答 1查看 169关注 0票数 0

我的java应用程序工作了1天(我使用不同的lib处理照片,比如ffmpeg、javacv、javacpp),然后我看到我的应用程序使用9,5 my。

系统监控工具

我不明白为什么我的应用程序使用这么多内存。

我设置了-Xmx6G

在VisualVM中,我看到堆空间大小为188M

visualVM中的堆空间

元空间使用141米

visualVM中的元应用

也许这会有帮助

在visualVM中分配字节

我读到的文章说Java使用的RAM比堆空间多,因为有JIT、堆空间、元空间、代码、ant等,但是9.5Gb在我的脑海中占了很多

编辑:

  • 是的,我的应用程序有时有异常,java.lang.OutOfMemoryError: Java堆空间
EN

回答 1

Stack Overflow用户

发布于 2021-07-16 12:41:52

我在一定程度上解决了这个问题,部分感谢塞缪尔·奥德的评论。(但是不管堆spase使用的是稳定的125 M,metaspace 100 m,java进程使用1,4 use )

所以问题是在代码中,我从视频中获得帧。

我的旧密码:

代码语言:javascript
复制
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

好代码:

代码语言:javascript
复制
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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68335074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档