我完全厌倦了,不得不为-Xmx
命令行选项猜测一个好的值,让我的应用程序因OutOfMemoryException
而崩溃,必须修改-Xmx
值,并且必须一直重新启动我的应用程序。
有没有办法让JVM正常运行,以便它不需要-Xmx
选项,并且可以直接从操作系统分配和free 内存,就像任何正常的应用程序一样?是否有一些GC更高效,在释放对象时积极地将内存返回给操作系统?
如果我没记错的话,Java的根源在于嵌入式环境,但是它早已越来越受欢迎并且已经扩展到各种系统。当然,在21世纪必须有办法做到这一点吗?有许多用例,应用程序可能需要从几千字节到几兆兆字节的内存,而繁琐的-Xmx
实际上正在阻碍。
(提醒自己:由于没有好的答案,以cargo cult方式迭代尝试其他一些GC-s和随机命令行选项)
答案 0 :(得分:2)
有没有办法让JVM正常运行,以便它不需要-Xmx选项,并且可以直接从操作系统分配和释放内存,就像任何普通应用程序一样?
这是默认情况下的作用。您只需要设置最大堆大小,以指示您希望在何时获得错误而不是使用更多内存。
是否有一些GC更高效,在释放对象时积极地将内存返回给操作系统?
我相信Oracle JVM中的G1收集器在这方面更好(因为它更新?)
如果我没记错的话,Java的根源在于嵌入式环境,
它的根源是Java小程序。 J2ME用于嵌入式系统,这是一个不同的版本和代码库。
繁琐的-Xmx确实妨碍了。
我通常不会自己设定。如果您有128 GB或更多,则默认为32 GB。
答案 1 :(得分:0)
由于没有好的答案,所以在货物崇拜时代迭代尝试其他一些GC-s和随机命令行选项
另一种方法是了解GC如何工作以及它们的性能权衡取舍以及这些参数如何影响它们,然后根据这些信息而不是随机选择它们。
当然,你仍然可以使用SO答案作为起点,找到可能导致你想要的结果的选项,但是没有什么可以阻止你研究为什么他们取得了这些成果。
无需崇拜飞机。