У меня есть приложение, которое запускает собственный код из DLL. Нативный код создает много объектов и занимает весь баран. В моем приложении Java я продолжаю проверять доступную оперативную память (Physical), и когда достиг определенного уровня, я вызываю System.runFinalization(), который, конечно, занимает некоторое время, но освобождает память, которая была занята объектами из собственного кода, который не имеет живой ссылки.Java System.runFinalization() на сервере Windows 2012
Теперь проблема в том, что это очень хорошо работает в Windows 7, но мой клиент использует Windows Server 2012. Когда System.runFinalization() выполняется на сервере, память не освобождается сразу (как это делается на Windows 7), но для освобождения всей памяти требуется около 5 минут, и приложение продолжает ждать выполнения System.runFinalization() в течение этого времени. Обратите внимание, что в Windows 7 освобождение памяти не является немедленным, но все же оно завершено всего за несколько секунд. Любая помощь будет действительно оценена!
Что вы подразумеваете под * «память не выдается немедленно» *? Сбор мусора и, таким образом, доступный как часть управляемой кучи или выпущенный обратно в ОС? * «Нативный код создает много объектов» * объекты java (через JNI) или объекты C++? Вы должны более точно описать свой сценарий. – the8472
Сразу же означает, что он не отражается в диспетчере задач, он просто перестает увеличиваться. System.runFinalization не освобождает элемент управления до тех пор, пока память не будет освобождена примерно через 5 минут, а затем будет выполнен следующий оператор в коде. –
ли он потребляет циклы процессора во время выполнения финализации? это страница в памяти? – the8472