Java垃圾收集,基于类的终身

时间:2014-04-02 15:06:04

标签: java garbage-collection latency

我一直在玩Java垃圾收集器的参数,当eden / survivor空间填满时,我看到昂贵且频繁的小垃圾收集。这是因为我分配了一个非常大的对象池。我知道的这些对象是“permament”,因为它们被重用但永远不会被GCed。因此,我试图找到一种方法来“自动”将这些类型的对象放在旧代而不是新代中。

我目前正在通过分配一个非常大的新一代(以避免非常频繁的次要GC)解决这个问题,不幸的是,这意味着每个单独的集合都更昂贵。

我希望能够为每个类指定一个使用率,并将其设置为特定类别的对象非常低,我知道它们永远不会得到GCed(并且非常大) (在他的情况下,它是关于

我的应用程序对延迟敏感度很高。

我目前的设置是使用最小/最大堆大小为48的CMS。

这可能吗?我搜索了每个可能的JVM标志,但找不到任何相应的效果,并且看不到使用自定义类加载器的方法。

1 个答案:

答案 0 :(得分:2)

考虑到Hotspot,没有这样的标志可以让你直接在OldGen中分配某些Class实例。

如果池真的被重用并且"永久性",您应该只在池分配期间获得频繁的次要gcs。您需要运行您的应用程序更长的时间,看看该池是否确实是终身。之后,您不应该看到由池使用引起的任何次要GC。