gpt4 book ai didi

Java 进程使用的内存比 VisualVM 显示的多

转载 作者:行者123 更新时间:2023-12-04 23:07:05 27 4
gpt4 key购买 nike

我的 java 应用程序工作 ~ 1 天,
(我使用不同的库来处理照片,如 ffmpeg、javacv、javacpp)
然后我看到我的应用程序使用 9,5Gb RAM。
system monitoring tools
我不明白为什么我的应用程序使用这么多内存。
我设置 -Xmx6G
在 VisualVM 中,我看到堆空间大小为 188M
heap space in visualVM
元空间使用 141M
metaspace in visualVM
可能这有帮助
allocated bytes in visualVM
我读过一些文章,Java 使用的 RAM 比堆空间多,因为有 JIT、堆空间、元空间、代码、ant 等。但 9.5Gb 在我的脑海中占了很多
编辑:

  • 是的,我的应用有时会出现异常 java.lang.OutOfMemoryError: Java heap space
  • 最佳答案

    我部分解决了这个问题,部分感谢 Samuel Audet 的评论。
    (但无论堆空间使用稳定的 125M,元空间 100M 但 java 进程使用 1,4Gb)
    所以问题出在我从视频中获取帧的代码中。
    我的旧代码:

    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 是 Autoclosable 的所有潜在类,并且我们在实例时每次调用 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();

    关于Java 进程使用的内存比 VisualVM 显示的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68335074/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com