我在JavaFX中开发了一个销售点应用程序。有些客户指出系统在一天中的特定时间开始挂起,而且经常使用它。
我做了一些测试,将我的应用程序的最大堆内存限制到一个非常小的数量(-Xmx30m),我确实注意到系统挂起,一些缓慢的操作,通常需要不到一秒钟,窗口打开只是一个白色没有内容等的背景......所以我认为这也可能是我客户的问题。
所以我认为在我收到这些错误的客户端上,默认情况下使用的最大内存可能会低于应有的值,并且通过添加参数来指定最大内存并通过-Xmx1512m和-Xms1512m启动内存也许这可以解决问题,但这样做是一个好习惯吗?我可以有不良副作用吗?
答案 0 :(得分:4)
如果您的应用程序需要 1.5gb的内存,那么这就是解决问题的方法。但如果问题是由程序中的“内存泄漏”引起的,更改设置可能只会隐藏问题的根源。
您应该尝试分析应用程序的内存使用情况,以验证:
例如,我有一个内存饥饿的JavaFX应用程序,并意识到JavaFX属性对象使用了大量内存,因为JavaFX对象(表等)保留了对这些属性的引用而无法收集垃圾。我改变了设计以重用现有属性而不是创建新属性,并解决了内存问题。
答案 1 :(得分:1)
堆大小应根据您系统所需的内存来确定。 -Xmx1512m和-Xms1512m没有问题,你的机器有足够的内存,如4GB或更多。虽然为您调整应用程序提供了选项,但这并不是一种糟糕的做法。当GC呼叫时你可能面临的唯一副作用,它将比以前花费更长的时间,但我认为它不会被注意到。