Java Unix/Linux中的JVM内存管理

Java Unix/Linux中的JVM内存管理,java,memory-management,jvm,Java,Memory Management,Jvm,嗨 我经历了一种奇怪的现象 我有一个Java应用程序,它通过Hibernate ORM查询数据库 在HP-UX sgx842 B.11.11 U 9000/800 888281448无限用户许可证中启动服务器并对数千条记录进行几次查询后,堆大小稳定在800MB 在Linux sglx481.amk.st.com 2.6.9-34.ELsmp#1 SMP Feb 24 16:56:28 EST 2006 x86_64 x86_64 x86_64 GNU/Linux中,内存爆炸,直到达到最大JVM内

嗨 我经历了一种奇怪的现象

我有一个Java应用程序,它通过Hibernate ORM查询数据库

HP-UX sgx842 B.11.11 U 9000/800 888281448无限用户许可证中
启动服务器并对数千条记录进行几次查询后,堆大小稳定在800MB

Linux sglx481.amk.st.com 2.6.9-34.ELsmp#1 SMP Feb 24 16:56:28 EST 2006 x86_64 x86_64 x86_64 GNU/Linux
中,内存爆炸,直到达到最大JVM内存(由
-Xmx
选项设置)。但是,系统不会减速,仍然可以执行数据查询。没有
OutOfMemoryError
异常。虽然我没有使用过工具,但从视觉上看性能并没有明显下降

Windows中也没有问题

在hibernate中,我不使用注释,而是手动打开和关闭会话和传输

sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION).buildSessionFactory();
session = sessionFactory.getSessionFactory().openSession();


session.beginTransaction();
...
session.close();

这就是垃圾收集运行时的样子。内存很快,但垃圾收集会减慢速度,所以没有理由不使用所有可用内存,除非您确实需要,否则避免垃圾收集任何内容