如何在Java应用程序启动时减少VM消耗?

时间:2015-08-12 09:59:41

标签: java spring hibernate

我正在开发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消耗的几个步骤。

减少VM消耗的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

不确定堆积不足的正确原因。要找到需要调试它的正确原因。

调试步骤

  • 在Out Of的情况下,使用JVM arg将内存转储到给定位置 记忆。它将创建一个hevy文件(最多几GB)

    -XX:+ HeapDumpOnOutOfMemoryError    -XX:HeapDumpPath =文件路径

  • 使用任何分析器加载转储文件。找到罪魁祸首。以下是 使用堆转储的链接

heap dump using visualvm

heap dump tricks

答案 1 :(得分:0)

Inorder应用程序出现后,由于应用程序可能抛出OutOfMemory而导致内存空间不足,JVM一旦启动就需要最小的初始化堆空间。没有选项可以减少VM的内存消耗。如果应用程序请求对象分配,JVM将分配内存。垃圾收集器有责任清理死物。

以下选项有助于识别泄漏

1)-verbose:gc此参数将记录GC占用行为。一旦System抛出OOM,您可以在垃圾收集器和内存vzisualizer工具中加载日志,以查看该工具提供的分配模式和调整建议。

2)在OOM上收集堆转储并将其加载到MemoryAnalyzerTool(MAT)中并检查泄漏嫌疑人。

答案 2 :(得分:0)

解决方案:

  1. 之前我在数据库中使用3个会话工厂映射了3个模式。现在用一个映射。在那里保存了110 MB。

  2. 为了进一步提高性能,Integerated Ehcache。

相关问题