java - java 'Robot' 类内存泄漏
问题描述
我正在制作共享屏幕程序。(客户端)
可悲的是,我发现发生了内存泄漏。
为了检查内存泄漏,我将其简化为:
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
解决方案
在我看来,问题出在您的 while 循环而不是 Robot 上。您的代码一直在使用 CPU。在 while 循环中添加 Thread.yield() 将使您的线程能够休眠足够长的时间以进行垃圾收集。
推荐阅读
- r - 查找数据帧之间的不匹配
- javascript - 为什么 addEventListener("resize") 可能会触发多次?
- android - Firebase Crashlytics 何时将 Proguard/R8 映射文件上传到他们的服务器?
- php - 获取过去 6 个月的时间戳,显示特定日期的重复项
- apache-kafka - 带有用户主题的 Kafka Streams API(预定义主题)
- java - 为什么apache commons lang是“lang”,lang代表语言吗?
- r - 从 R 中的单个日期时间列创建开始和结束时间列
- java - 我在使用 REST Assured API POST 请求时遇到问题
- database - 如何为sqlite中的层次结构数据逐级生成序列号?
- android - 使用导航抽屉和片段未出现工具栏菜单