让java理解swap的存在,并鼓励他使用它

让java理解swap的存在,并鼓励他使用它,java,raspberry-pi,heap-memory,ram,swapfile,Java,Raspberry Pi,Heap Memory,Ram,Swapfile,因此,我有一个java jar在我的raspberry pi上运行,它需要大量内存。我已在外部usb闪存驱动器上设置了2GB交换。但是当我用-Xmx2048M启动jar时,它说它不能为2097152KB对象堆保留足够的空间。我知道这是个坏主意,但我还是想做。如何让java将交换识别为堆空间?java不知道交换空间。它只是要求操作系统提供“更多内存”,而操作系统会根据仍然可用的内存来回答“是”或“否” 交换空间在Raspberry Pi操作系统级别配置;有关详细信息,请参阅 但是你试过正常的方法吗

因此,我有一个java jar在我的raspberry pi上运行,它需要大量内存。我已在外部usb闪存驱动器上设置了2GB交换。但是当我用-Xmx2048M启动jar时,它说它不能为2097152KB对象堆保留足够的空间。我知道这是个坏主意,但我还是想做。如何让java将交换识别为堆空间?

java不知道交换空间。它只是要求操作系统提供“更多内存”,而操作系统会根据仍然可用的内存来回答“是”或“否”

交换空间在Raspberry Pi操作系统级别配置;有关详细信息,请参阅

但是你试过正常的方法吗

  • 使用
    -Xmx
    JVM命令行选项设置Java堆大小1。(有关详细信息,请参见
    manjava
  • 检查每个进程是否没有阻止JVM进程请求更多内存的“ulimit”。(有关详细信息,请参见
    manulimit

1-这不是“告诉它使用交换”。它告诉Java将最大堆大小设置为不同于默认最大堆大小的值


更新-我从一条评论中看到,您知道-Xmx选项,并且可能正在使用它。所以剩下一件事。由于您在32位操作系统上使用32位JVM,因此JVM的总内存使用量有一个体系结构限制。限制将小于4 GB。。。全部结束。(据英国《每日电讯报》报道,该限制为3.6GB左右,但我不认为这是准确的。)

如果你正在接近那个极限,恐怕你对此无能为力

你说:

即使我将-Xmx设置为1900M,它也会失败

完整的错误/异常消息是什么


我只需要更多的内存

嗯,如果你真的需要更多的内存,你需要买一个有更多内存的树莓圆周率。(显然,在现有Pi上扩展RAM没有任何受支持的选项。)

增加RAM和增加可用虚拟内存不是一回事


请注意,如果将JVM堆的大小设置为大于可用RAM,则在JVM执行完全垃圾收集时,可能会遇到抖动问题。

Java不知道交换空间。它只是要求操作系统提供“更多内存”,而操作系统会根据仍然可用的内存来回答“是”或“否”

交换空间在Raspberry Pi操作系统级别配置;有关详细信息,请参阅

但是你试过正常的方法吗

  • 使用
    -Xmx
    JVM命令行选项设置Java堆大小1。(有关详细信息,请参见
    manjava
  • 检查每个进程是否没有阻止JVM进程请求更多内存的“ulimit”。(有关详细信息,请参见
    manulimit

1-这不是“告诉它使用交换”。它告诉Java将最大堆大小设置为不同于默认最大堆大小的值


更新-我从一条评论中看到,您知道-Xmx选项,并且可能正在使用它。所以剩下一件事。由于您在32位操作系统上使用32位JVM,因此JVM的总内存使用量有一个体系结构限制。限制将小于4 GB。。。全部结束。(据英国《每日电讯报》报道,该限制为3.6GB左右,但我不认为这是准确的。)

如果你正在接近那个极限,恐怕你对此无能为力

你说:

即使我将-Xmx设置为1900M,它也会失败

完整的错误/异常消息是什么


我只需要更多的内存

嗯,如果你真的需要更多的内存,你需要买一个有更多内存的树莓圆周率。(显然,在现有Pi上扩展RAM没有任何受支持的选项。)

增加RAM和增加可用虚拟内存不是一回事


请注意,如果将JVM堆的大小设置为大于可用RAM,则在JVM执行完全垃圾收集时,很可能会遇到抖动问题。

可能是您的raspberry操作系统阻止了交换。因为在sd卡上交换大量数据是愚蠢的。如果您确实想要交换,请将一个真正的usb硬盘连接到PI,并在该磁盘上创建交换文件/分区。但是如果你问我,就不要在PI上使用java,至少不要使用大尺寸的java应用程序,哈哈。@paladin我的交换文件已经在usb闪存驱动器上了,我只需要更多的ram,我接受后果java只是要求操作系统为堆提供内存,这取决于操作系统使用交换。这是32位Java吗?2Gb左右通常是32位Java可以使用的最大内存,它需要64位才能使用更多的内存。@greg-449即使我将-Xmx设置为1900M只是为了确保;您使用的是64位操作系统吗?可能是您的raspberry操作系统阻止了交换。因为在sd卡上交换大量数据是愚蠢的。如果您确实想要交换,请将一个真正的usb硬盘连接到PI,并在该磁盘上创建交换文件/分区。但是如果你问我,就不要在PI上使用java,至少不要使用大尺寸的java应用程序,哈哈。@paladin我的交换文件已经在usb闪存驱动器上了,我只需要更多的ram,我接受后果java只是要求操作系统为堆提供内存,这取决于操作系统使用交换。这是32位Java吗?2Gb左右通常是32位Java可以使用的最大内存,它需要64位才能使用更多的内存。@greg-449即使我将-Xmx设置为1900M只是为了确保;您使用的是64位操作系统吗?我已经正确设置了交换,我的问题是java没有看到它。请验证您的交换是否按预期工作,raspberry操作系统通常具有“不同”的交换启用设置,即使配置了交换文件/分区,这些设置实际上也会停用交换。是的,它可以作为inte