Java 你的房间用完了吗?可以容纳多少文本,我可以容纳更多吗?
我正在为我在素数中发现的模式开发一个可视化工具。以下是StackMath的数学链接:以及StackCodeReview的完整代码: 我的问题似乎是我所在区域的空间不足 错误:Java 你的房间用完了吗?可以容纳多少文本,我可以容纳更多吗?,java,text,bigdata,Java,Text,Bigdata,我正在为我在素数中发现的模式开发一个可视化工具。以下是StackMath的数学链接:以及StackCodeReview的完整代码: 我的问题似乎是我所在区域的空间不足 错误: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at javax.swing.text.GapContent.allocateArray(Unknown Source) at javax.swing.text.GapVecto
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at javax.swing.text.GapContent.allocateArray(Unknown Source)
at javax.swing.text.GapVector.resize(Unknown Source)
at javax.swing.text.GapVector.shiftEnd(Unknown Source)
at javax.swing.text.GapContent.shiftEnd(Unknown Source)
at javax.swing.text.GapVector.open(Unknown Source)
at javax.swing.text.GapVector.replace(Unknown Source)
at javax.swing.text.GapContent.insertString(Unknown Source)
at javax.swing.text.AbstractDocument.handleInsertString(Unknown Source)
at javax.swing.text.AbstractDocument.insertString(Unknown Source)
at javax.swing.text.PlainDocument.insertString(Unknown Source)
at javax.swing.JTextArea.append(Unknown Source)
at PrimeSandbox.main(PrimeSandbox.java:67)
第67行:
screen.append(Arrays.toString(primesLL.toArray()) + "\n");
所以我唯一能想到的是,我必须在文本区域中输入大量文本。我能增加它能容纳的尺寸吗?或者我必须创建一个方法,将一些未显示的文本保存为字符串,并在滚动时重写它?(我真的不想)快速而肮脏的答案是给自己更多的堆空间:
java-Xmx2g PrimeSandbox
← 例如,为您提供2GB
这是否是一个好的长期解决方案取决于你是否只需要“多一点”,或者你是否有严重的记忆问题
在应用程序中移动字符串不会节省内存。
JTextArea
中显示的字符串不会比类中字段中的字符串占用更多内存。写入磁盘是你唯一的选择。Ohh所以这与整个程序本身有关,它占用了操作系统提供给它的所有空间?@BumSkeeter是的。这可能只是偶然的机会,例外发生在它发生的地方。您可能存在内存泄漏(例如,在不应该的情况下抓住对象),或者您只需要更多内存。在后一种情况下,增加堆。在前一种情况下,分析可能会对您有所帮助。您能否查看OP中指向我的代码的链接,并告诉我您认为是哪种情况?我敢肯定,这只是因为我的内存不足。我正在处理71K个素数的列表。所以这是一个巨大的数据量。