Интересно, есть ли случаи, когда JVM Hotspot или любые другие JVM могут детерминистически собирать мусор. Я знаю об анализе побега, но задаюсь вопросом, работает ли он для выделенных кучи объектов. То, что я имею в виду в коде C++, такие как это дает детерминированный сбор мусора от кучиДетерминированная сборка мусора в JVM
#include <vector>
int main(int argc, char*argv[]){
std::vector<double> v_somevector;
} // std::vector::~vector() is called determinitically
Конечно, в Java что-то вроде
.
.
.
private double ma() throws Exception{
double result = 0.0;
final double[] closes = new double[100000];
//perform some calculation using the closes array above
return result;
} // At this point why shouldn't closes be deterministically garbage collected (as in immediately)?
Должен быть детерминированным в мусоре, собирающего массив закрывается. Для того, что кажется, анализ escape-анализа, по-видимому, фокусируется на возможности выделения закрывающего массива в стеке, но даже если он выделен в кучу, в этом случае я не вижу, почему он не может быть собран при выходе из ma() с)
Мне удавалось писать приложения, которые не останавливались на Full GC в течение нескольких недель, но не могут не думать, что могут быть ситуации, когда отсрочка GC может быть нежелательной. Поэтому, возможно, это как вариант виртуальной машины будет желательным. – Michael
@Michael Обратите внимание, что синхронное, исправленное управление памятью также может вызвать внезапные задержки - например, если куча слишком фрагментирована и нуждается в некоторой консолидации, или если вы выпустили ссылку на большой связанный список/бинарное дерево, транзитивно вызывающее много ссылок чтобы достигнуть нуля сразу. –
@MarkoTopolnik Хорошая точка. – Michael