Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java垃圾收集器的行为是随着时间的推移而演变还是受到JIT的影响?_Java_Garbage Collection_Jvm_Jit - Fatal编程技术网

Java垃圾收集器的行为是随着时间的推移而演变还是受到JIT的影响?

Java垃圾收集器的行为是随着时间的推移而演变还是受到JIT的影响?,java,garbage-collection,jvm,jit,Java,Garbage Collection,Jvm,Jit,我们的intranet上运行着一个生产web应用程序,该应用程序: 每天凌晨3点重新启动,以便对其数据库执行备份 在整个工作日内(0800至1700)具有相同的负载 正在Java HotSpot(TM)64位服务器VM版本20.45-b01上运行 运行在具有16个内核和32 Gig RAM的物理机器上,运行Linux 2.6.18-128.el5 不与任何其他重要流程共享机器 配置有: -Xms2g -XX:PermSize=256m -Xmx4g -XX:MaxPermSize=256m -

我们的intranet上运行着一个生产web应用程序,该应用程序:

  • 每天凌晨3点重新启动,以便对其数据库执行备份
  • 在整个工作日内(0800至1700)具有相同的负载
  • 正在Java HotSpot(TM)64位服务器VM版本20.45-b01上运行
  • 运行在具有16个内核和32 Gig RAM的物理机器上,运行Linux 2.6.18-128.el5
  • 不与任何其他重要流程共享机器
  • 配置有:

    -Xms2g
    -XX:PermSize=256m
    -Xmx4g
    -XX:MaxPermSize=256m
    -Xss192k
    -XX:+UseParNewGC
    -XX:+UseConcMarkSweepGC
    -XX:+CMSParallelRemarkEnabled
    -XX:CMSInitiatingOccupancyFraction=50
    -XX:+DisableExplicitGC
    
每天的堆使用率:

  • 从启动到0800逐渐上升到90%
  • 在9时30分之前保持在90%
  • 从0930年到1415年保持在70%
  • 在1415年下降到50%
  • 在1445年降至37%
在这一点上,堆在大约40分钟内上升到55%,并被收集回37%,直到下次重新启动

我们在JVM上安装了AppDynamics,可以看到主要的垃圾收集几乎每分钟都会发生,对内存没有太大影响(当然,除了上面概述的下降),直到内存达到37%,这时主要的垃圾收集变得不那么频繁

显然,web应用程序的行为有数百个外部因素,但研究的一个途径是,当JVM停止时,热点JIT信息明显丢失

是否有GC优化/etc也会随着JVM的关闭而丢失?由于某些热点优化尚未进行,JVM是否有效地消耗了比需要更多的内存

如果JVM没有重新启动,并且我们找到了另一种执行数据库备份的方法,那么我们是否可能从这个应用程序中获得更好的内存性能


(只是重申一下,我知道有成千上万的事情可能会影响应用程序的行为,尤其是其他人几乎不知道的应用程序!我真的只想知道JVM的内存性能是否与某些事情有关,而这些事情在停止时会丢失)

是,由于JIT优化,地面军事系统的行为可能随时间而改变。一个例子是“转义分析”,它自Java6U23以来默认启用。这种类型的优化可以防止在堆中创建某些对象,因此根本不需要垃圾收集


有关更多信息,请参阅。

我对此一无所知,尽管我怀疑完整的JIT优化只有在运行6个小时后才会生效(0930内存使用量最大,之后会下降)。对我来说,这看起来很像一个垃圾收集,一开始太懒了。如果从-Xmx3g开始,会发生什么?它是否内存不足?我很可能认为,在第一个小时左右之后,您看到的大部分波动都是由于工作负载的变化造成的。