本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问;如何解决因堆空间不足而引发的错误?
我的应用程序当前正在运行物理模拟,因此会占用大量内存。问题是,在第51次仿真中,Java通常会由于堆空间不足而引发错误(我的程序最终会运行数千个仿真)。
无论如何,我是否不仅可以增加堆空间,还可以修改程序,以便在每次运行后清除堆空间,以便可以运行任意数量的模拟?
回答1:
由于无法在启动Java虚拟机时分配堆,因此无法以编程方式动态地增加堆。
但是,您可以使用此命令
java -Xmx1024M YourClass
复制代码
或者,您可以设置最大最小值
java -Xms256m -Xmx1024m YourClassNameHere
复制代码
回答2:
如果您正在使用大量内存并且面临内存泄漏,那么您可能要检查是否使用了大量的ArrayList或HashMap,每个集合元素都有很多元素。
一个ArrayList被实现为动态数组。Sun / Oracle的源代码显示,当将一个新元素插入到full中时ArrayList,将创建一个新数组,其大小是原始数组的1.5倍,并复制了这些元素。这意味着ArrayList除非您调用其trimToSize方法,否则您可能浪费多达50%的空间。因此,如果您事先知道要插入的元素数量,则以初始容量作为参数调用构造函数。
我没有HashMap非常仔细地检查源代码,但是乍一看似乎每个数组的长度HashMap必须是2的幂,这使它成为动态数组的另一种实现。请注意,这HashSet实际上是的包装HashMap。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END