我有一个大型的应用程序,包含两种类型的对象:长期存在的(缓存)和短期存在的(请求 - 处理 - 响应)。理论上,对于这种类型的应用程序,我认为可以配置Young和Old空间,以便Old空间消耗是恒定的,从而不会发生Full GC。
我已更改newSize-maxNewSize参数,但旧堆继续上升,直到发生Full GC。每次Full GC后,消耗量下降到20%(缓存占用20%)。由于某些原因,我的对象进入了Old空间。我有两个嫌疑对象为什么要移动到Old空间:
根据这篇文章:http://chaoticjava.com/posts/gc-tips-and-memory-leaks/,如果您分配了大对象,它们会直接进入Old空间。这是真的吗?如果是,是否有JVM选项参数可以设置Young空间的对象大小阈值?
如果我正确地理解了该过程,则在将对象移动到Old部分之前,对象会在To-From存活段之间切换。是否有参数可以设置在移动到Old空间之前要进行多少次To-From切换?
还有其他提示吗?
谢谢, Amar