0

我正在为我在素数中找到的模式开发可视化工具。这是 StackMath 中有关它的数学的链接:Primes 中的模式和 StackCodeReview 中的完整代码:代码优化

我的问题似乎是我的 JTextArea 空间不足。

错误:

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");

所以我唯一能想到的是我在 TextArea 中有很多文本。我可以增加它可以容纳的尺寸吗?或者我必须创建一种方法来将一些未显示的文本保存到字符串中并在滚动时重写它?(我真的不想)

4

1 回答 1

0

快速而肮脏的答案是给自己更多的堆空间:

java -Xmx2g PrimeSandbox ← 给你 2GB,例如

这是否是一个好的长期解决方案取决于您是否只需要“多一点”,或者您是否有一个猖獗的记忆问题。

您不会通过在应用程序中移动字符串来节省任何内存。a 中显示的字符串JTextArea不会比类中字段中的字符串更占用内存。写入磁盘将是您唯一的其他选择。

于 2013-04-25T14:45:57.880 回答