【问题标题】:Possible Apple JVM bug: java.lang.OutOfMemoryError: Java heap space at apple.awt.CRobot.getRGBPixels(CRobot.java:204)可能的 Apple JVM 错误:java.lang.OutOfMemoryError:apple.awt.CRobot.getRGBPixels 处的 Java 堆空间(CRobot.java:204)
【发布时间】:2011-04-21 18:06:51
【问题描述】:

我在截屏时遇到问题。这是我的测试代码。

import java.awt.Robot;
import java.awt.AWTException;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Dimension;

public class Test {
        public static void main(String[] args) throws AWTException {
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            int[] pixels = new int[(int) (screenSize.getWidth() * screenSize.getHeight()) * 3];
            Robot robot = new Robot();
            int i = 0;

            while (true) {
                robot.createScreenCapture(new Rectangle(screenSize))
                     .getRaster().getPixels(0, 0, (int) screenSize.getWidth(), (int) screenSize.getHeight(), pixels);
                System.out.println(++i);
            }
        }
}

在我的 Mac*s* 上使用 OS X 10.6.4 和 Java 1.6.0_20-b02-279-10M3065,它在两次迭代后失败。它似乎在 Windows 上运行良好。你能重现这种行为吗?

线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间 在 apple.awt.CRobot.getRGBPixels(CRobot.java:204) 在 java.awt.Robot.createScreenCapture(Robot.java:329) 在 Test.main(Test.java:16)

【问题讨论】:

    标签: java macos jvm


    【解决方案1】:

    OutOfMemory 表示您需要give the program more memory。现在这往往在 Mac 上更频繁地发生,因为 Java 现在是 64 位的,需要更大的堆。

    【讨论】:

    • 但是为什么会这样呢?由于我没有在 while 循环中存储任何新的引用,GC 应该释放 Robot 类在内部使用的内存,不是吗?当我在循环内创建一个新的 Robot 实例时,也会发生同样的情况。
    • 某物,某处正紧紧抓住它。查看 Terminal.app 中“jvisualvm”中的内存分析器。
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多