[英]How to reduce VM consumption in the startup of Java application?
我正在研究Java(Hibernate + Spring + JavaFX)应用程序。 要成功运行此应用程序,我必须将VM设置为“ -Xms512m”,否则它将因以下提到的错误而失败。
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [*path/*]:
Constructor threw exception; nested exception is java.lang.OutOfMemoryError: Java heap space.
我观察到会话工厂正在消耗250 MB以上的内存来启动。 有些hbm(hbm POJO)文件占用180 MB
我还尝试了Netbeans Profiler会话以减少内存泄漏。
您能否建议一些减少应用程序启动中VM消耗的步骤。
减少虚拟机消耗的最佳方法是什么?
不确定堆spcae不足的正确原因。 要找到正确的原因,您需要对其进行调试。
调试步骤
如果内存不足,请使用JVM arg将内存转储到给定位置。 它将创建一个庞大的文件(最多几个GB)
-XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = path_to_file
使用任何探查器加载转储文件。 找到罪魁祸首。 以下是使用堆转储的链接
为了启动应用程序,JVM将在启动后需要最少的Java堆空间进行初始化,这是由于缺少内存空间导致应用程序可能抛出OutOfMemory。 没有选择来减少VM的内存消耗。 如果应用程序请求对象分配,则JVM将分配内存。 垃圾收集器有责任清理掉死掉的物体。
遵循Option可能有助于识别泄漏
1)-verbose:gc此参数将记录GC占用行为。 一旦系统抛出OOM,就可以将日志加载到垃圾收集器和内存vzisualizer工具中,以查看该工具提供的分配模式和调整建议。
2)在OOM上收集堆转储并将其加载到MemoryAnalyzerTool(MAT)中,并检查是否有泄漏的可能。
解:
之前,我在具有3个会话工厂的数据库中映射了3个模式。 现在映射一个。 在那里保存110 MB。
为了进一步提高性能,请使用Integerated Ehcache。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.