JVM GC понижает объект до райского пространства? - PullRequest
2 голосов
/ 24 марта 2012

Полагаю, это невозможно ... но здесь.Насколько я понимаю, собирать райское пространство дешевле, чем пространство старого поколения, особенно когда вы начинаете попадать в очень большие кучи.Большие кучи имеют тенденцию создавать долго работающие приложения (серверные приложения), а серверные приложения часто хотят использовать какие-то кеши.Кэши с некоторым видом выселения (LRU) имеют тенденцию опровергать некоторые предположения, которые делает GC (временные объекты быстро умирают).Таким образом, кеширование в конечном итоге заполняет старый ген быстрее, чем вам хотелось бы, и в результате вы получаете более дорогую коллекцию старых генов.

Теперь, кажется, такого рода вещей можно было бы избежать, если бы java предоставил способ пометить ссылку как умирающую (удалить ключевое слово)?Разница между этим и c ++ заключается в том, что использование является необязательным.И вызов delete на самом деле не удаляет объект, а скорее является подсказкой для GC, что он должен вернуть объект обратно в пространство Eden (где его будет легче собрать).Я предполагаю, что эта функция не существует, но почему бы и нет (есть ли причина, по которой это плохая идея)?

1 Ответ

1 голос
/ 24 марта 2012

На самом деле пространство eden - это зона памяти, в которой создаются объекты. Как только объект покидает пространство eden, он не может быть помещен туда снова, тогда реализация Java для GC настолько непрозрачна, что обычно делать особо нечего.

В любом случае это нарушило бы некоторые ограничения: пространство eden легко собирать мусором в том смысле, что нужно заботиться об удалении элементов, имеющих короткий срок службы. Если объект прожил достаточно времени, его нужно перенести куда-то еще, это все равно, что пытаться идти вразрез с правилами, налагаемыми самим GC, что никогда не может быть легко доступно в Java

...