aus*_*ser 7 java garbage-collection
Java HotSpot™虚拟机中的内存管理文档的第6页包含以下段落:
年轻代集合相对频繁地发生并且高效且快速,因为年轻代空间通常很小并且可能包含许多不再被引用的对象.
在一些年轻一代的藏品中存活下来的物品最终会被提升或保留给老一代.参见图1.这一代通常比年轻一代更大,其占用率增长更慢.因此,老一代的收藏品很少,但需要更长的时间才能完成
有人可以在上述陈述中定义" 频繁 "和" 不常见 "的含义吗?我们在谈论微秒,毫秒,分钟,天?
Ste*_*n C 10
不可能给出明确的答案.它实际上取决于很多因素,包括平台(JVM版本,设置等),应用程序和工作负载.
在一个极端情况下,应用程序可能永远不会触发垃圾收集器.它可能只是在那里无所事事,或者它可能执行一个非常长的计算,其中在JVM初始化和应用程序启动之后没有创建任何对象.
另一方面,理论上可以在一个垃圾收集端和另一个垃圾收集端在几纳秒内启动.例如,如果您的应用程序处于从完整堆中死亡的最后阶段,或者它正在分配病态大型数组,则可能会发生这种情况.
所以:
我们在谈论微秒,毫秒,分钟,天?
可能以上所有,虽然前两个肯定会令人不安,如果你在实践中观察它们.
一个很乖的应用程序不应该运行GC过于频繁.如果您的应用程序每秒触发一次或多次年轻空间收集,那么这可能会导致性能问题.太频繁的"完整"收藏更糟糕,因为它们的影响更大.但是,如果设计不佳/实现的应用程序表现得像这样,那肯定是合理的.
还有一个问题是GC运行之间的间隔并不总是有意义的.例如,一些HotSpot GC实际上具有与正常应用程序线程并行运行的GC线程.如果您有足够的内核,足够的RAM和足够的内存总线带宽,那么持续运行的并行GC可能不会明显影响应用程序性能(达到一定程度).
| 归档时间: |
|
| 查看次数: |
18061 次 |
| 最近记录: |