我正在将大文件(〜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
之外,我没有使用并发。
答案 0 :(得分:0)
你可能正在使用32位版本的Java Runtime Environment,安装x64版本它应该可以工作。