0

我正在制作共享屏幕程序。(客户端)

可悲的是,我发现发生了内存泄漏。

为了检查内存泄漏,我将其简化为:

import java.awt.*;
import java.awt.image.BufferedImage;

public class Sharescreen {
    public Sharescreen() {
        try {
            Robot robot = new Robot();
            Rectangle winSize = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());

            while (true) {
                BufferedImage image = robot.createScreenCapture(winSize);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] argv) {
        new Sharescreen();
    }
}

跑 :

java -Xms50m -Xmx100m -jar "分享 screen.jar"

但!!运行程序10分钟后,

内存使用: 在此处输入图像描述

“机器人”课一定有问题!!!

我该如何解决?

java(jdk) 版本:openjdk 11.0

4

1 回答 1

0

在我看来,问题出在您的 while 循环而不是 Robot 上。您的代码一直在使用 CPU。在 while 循环中添加 Thread.yield() 将使您的线程能够休眠足够长的时间以进行垃圾收集。

于 2021-03-24T02:37:57.380 回答