**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
所以,我有一个javajar在我的raspberry pi上运行,它需要大量内存。我已在外部usb闪存驱动器上设置了2GB交换。但是当我用-xmx2048m启动jar时,它说它不能为2097152kb对象堆保留足够的空间。我知道这是个坏主意,但我还是想做。如何让java将交换识别为堆空间?
**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
所以,我有一个javajar在我的raspberry pi上运行,它需要大量内存。我已在外部usb闪存驱动器上设置了2GB交换。但是当我用-xmx2048m启动jar时,它说它不能为2097152kb对象堆保留足够的空间。我知道这是个坏主意,但我还是想做。如何让java将交换识别为堆空间?
1条答案
按热度按时间1yjd4xko1#
java不知道交换空间。它只是要求操作系统提供“更多内存”,操作系统会根据可用的内存来选择“是”或“否”。
交换空间配置在raspberry pi操作系统级别;有关详细信息,请参见如何设置交换空间。
但是你试过正常的方法吗?
使用
-Xmx
jvm命令行选项来设置java堆大小1(看到了吗man java
有关详细信息。)检查每个进程是否存在阻止jvm进程请求更多内存的“ulimit”(看到了吗
man ulimit
有关详细信息。)1-这不是“告诉它使用交换”。它告诉java将最大堆大小设置为不同于默认最大堆大小的值。
更新-我从一条评论中看到,您知道-xmx选项,并且可能正在使用它。所以剩下一件事。由于您在32位操作系统上使用的是32位jvm,因此jvm的总内存使用量有一个体系结构限制。限制将小于4 gb。。。都准备好了(根据这一点,限制是3.6 gb左右,虽然我不相信这是准确的。)
如果你正在接近这个极限,恐怕你对此无能为力。
你说:
即使我将-xmx设置为1900m,它也会失败
完整的错误/异常消息是什么?
我只需要更多的公羊。
好吧,如果你真的需要更多的公羊,你需要买一个树莓皮与更多的公羊(显然,在现有pi上扩展ram没有任何受支持的选项。)
增加ram和增加可用虚拟内存不是一回事。。。
请注意,如果将jvm堆的大小设置为大于可用ram,则在jvm执行完全垃圾收集时,很可能会遇到颠簸问题。