OutOfMemoryError即使有足够的内存

时间:2015-09-02 16:12:17

标签: java out-of-memory

我正在将大文件(〜1 GB)读入字节数组。然后我对它们执行各种读取操作。不幸的是,我似乎遇到了内存问题。

searchButton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent searchPerformed)
    {
        searchButton.setEnabled(false);
        resultsArea.setText("");

        new SwingWorker<String, String>()
        {
            @Override
            protected String doInBackground() throws Exception
            {
                readFilesAndProcessThem();

                return null;
            }

            @Override
            public void done()
            {
                searchButton.setEnabled(true);
            }
        }.execute();
    }
});

根据3.5 GB,应用程序仅消耗Task Manager个RAM,但执行过早停止。搜索按钮在搜索开始时变为灰色,但很快就会再次启用。为什么调用done()方法? SwingWorker中的代码不会抛出异常,也不会完成。

为了解决内存问题,我已经在Eclipse中添加了VM参数-Xmx,以允许更多内存并将其设置为10G。我的计算机有10 GB个可用内存,JVM可以使用所有内存,但我的应用程序运行不正常。

有时候,当我关闭应用程序时(不是完整的异常跟踪),我在命令行上看到一条红线说OutOfMemoryError。如何解释/修复这种奇怪的行为?

我在运行Jar文件和VM argument -Xmx10G时遇到了同样的问题。结果不是100%确定性的,但通常停在相同的位置。除了SwingWorker之外,我没有使用并发。

1 个答案:

答案 0 :(得分:0)

你可能正在使用32位版本的Java Runtime Environment,安装x64版本它应该可以工作。