我有一个企业级Java应用程序,每天为几千名用户提供服务。这是weblogic 10.3.6(Java 1.6 JVM)上的JAXB Web服务,使用Hibernate命中Oracle数据库。它还调用其他Web服务。
我们在生产系统上调整了以下GC设置:
-server -Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m
此GC尺寸的影响是什么?硬件具有足够的容量来处理它。
我知道这会将堆大小和perm gen设置在稳定的水平。但是当你最终不得不进行垃圾收集时,影响是什么呢?
对我来说,它似乎会使GC不那么频繁发生,但是当它确实发生时需要更长的时间。这听起来不错吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
这会使GC不那么频繁发生,但是当它发生时需要更长的时间
可能,这取决于您的使用案例。在极少数情况下,您甚至可能会发现GC更短。
2 GB的堆不是那么多,我会使用高达26 GB而不用担心堆大小。高于此大小的内存访问速度稍慢或使用更多内存。
答案 2 :(得分:1)
设置-Xmx& -Xms和PermSize& MaxPermSize到相同的大小将阻止JVM根据您的要求调整堆大小。这些调整大小很昂贵,因为它们会触发Full GC。
-server将允许JVM使用Server Compiler,它将在将代码编译为本机程序集指令之前进行更积极的优化。虽然现在任何拥有2个或更多内核和2GB +内存的计算机都会默认启用服务器编译器。
增加内存并不能解决问题。有时添加更多内存将是一种开销。
如果您需要有关GC的详细信息,可以试用link
调整内容的原因是为了提高应用程序的性能,并实现吞吐量和延迟目标。