在运行Java程序时是否添加-Xmx参数会导致垃圾收集器采取不同的行为或不经常发生?设置Java程序的最大内存是否影响GC?
回答
是的,最需要的Java垃圾收集器只运行,而不是按计划是否需要或不运行。所以,一般来说,更多的内存会导致频率更低,垃圾收集时间更长。
世代垃圾收集器有settings to control the allocation of memory between the young and tenured generations.通过设置这些使用年轻一代的总内存的一小部分,年轻一代的绝对大小可以保持相同的总堆大小增加。然后,垃圾收集频率或持续时间不会发生很大变化,但是对于像缓存这样的应用程序,您将有更多空间存在长寿命对象。
一般的答案是,垃圾将趋向于较少,但收集的GC暂停往往会更长。
这假设您已经拥有比您的工作集大小更多的VM可用内存;否则你可能会花费大量时间进行垃圾回收。
的GC特性变化很大,这取决于集电极你正在使用和Java版本,以及是否除了更高-Xmx指定更高的-Xms。在VM初始化之后,老版本的Java(5之前)没有调整年轻一代的空间大小。所以,即使您指定了非常大的-Xmx值,年轻一代的规模仍然非常小,因此您会看到年轻一代的经常收藏。
当年轻一代回收时,有将是无论如何都会被晋升为终身空间中的一些“年轻”的对象,即使它们是短命的对象。这意味着年老的一代会慢慢地填满死亡的年轻物体,需要定期全面的GC。在年龄代中结束的这类对象的数量与年轻GC的数量成正比(假设程序中的活动持续不变)。因此,年轻一代较大一代的优势在于年轻一代GC的数量将会减少,因此年轻一代的物品数量将会减少到年长一代。
有许多的除了-Xmx调整参数(谷歌的Java GC),你将与他们进行实验,因为最优的设置将针对每个应用而变化。
是的,但它取决于您正在使用哪个垃圾回收器。对于这类问题,GC tuning page是一个很好的资源。
这样做,因为当你有更多的内存,然后当它涉及到收集和紧凑它有更多的扫描。这意味着当一个(完整的)GC启动时意味着它必须扫描更多的内存,并且可能会压缩更多的内存。也许在更多的背景下我们可以进一步提供帮助显然有三个不同的部分被扫描,所以它不一定直接关联到1-1的意义上。
只能间接地,并在运行一段时间后。 -Xmx设置堆允许增长的最大大小,并且不影响初始大小。所以它不会在程序运行的早期影响gc时间或频率。如果gc后堆仍然(太接近)满,堆积量将增加,这就是-Xmx会影响的。 -Xmx的更高设置将允许堆(最终)变大,从而更少触发集合(并且这些集合将花费更长的时间,如其他人所描述的那样)。
但是,如果你的应用程序不使用太多的内存(以便堆是一个GC后大多是空的),堆永远不会和-MX设置都无关紧要。
您可以使用-Xms设置初始GC堆大小。这将对垃圾收集产生直接影响。
- 1. 应用程序大小是否影响启动速度和内存大小
- 2. GC Clojure/Java/JVM内存设置
- 3. GC是否会影响设备电池的显着降低?
- 4. -Xmx是否停止自动GC直到消耗最大内存?
- 5. 最大堆大小xmx如何影响Java中的内存分配/使用堆?
- 6. Java GC运行调整影响
- 7. java类的大小是否会影响应用程序的性能
- 8. uiscrollview的内容大小中的大值是否会影响设备内存中的分配?
- 9. 存储过程的位置是否影响其性能?
- 10. java程序代码的编码是否影响编译?
- 11. Java:语言环境是否影响格式化程序的JFormattedTextField
- 12. 如何影响堆内存的大小?
- 13. 串行GC对远程应用程序的影响?
- 14. asp.net设置是否会影响经典asp(IIS 6设置)
- 15. 锁定LOH中的对象是否影响GC性能?
- 16. ANSI C是否对内存中的程序大小设置了限制?
- 17. node_modules的大小是否影响离子应用程序的大小?
- 18. 设置最大内存使用C#
- 19. Twemcache超出最大内存设置
- 20. SQL Server最大内存设置
- 21. 如何设置Redis最大内存?
- 22. 设置最大内存使用率?
- 23. IBOutlets强大还是弱点 - 它实际上是否影响内存管理? (ARC)
- 24. 将影响Java内存使用情况的Linux配置?
- 25. 大班是否会影响表现?
- 26. 表大小是否影响INSERT性能?
- 27. 在父进程中更改的共享内存是否会影响子进程?
- 28. PHP SoapServer是否受最大执行时间影响?
- 29. 数据库(最大)字段长度是否会影响性能?
- 30. 如何最大化应用程序对事件的影响?