Как собственный код обрабатывается JVM - PullRequest
4 голосов
/ 06 мая 2009

Рассмотрим случай, когда мне нужно вызывать код C ++ из моей Java-программы. Код C ++ создает тысячи объектов. Где хранятся эти динамические объекты? Я подозреваю, что в куче JVM, потому что нативный код будет частью того же процесса, что и JVM.

Если да, применяются ли правила потока сборщика мусора Java к объектам кода C ++?

1 Ответ

4 голосов
/ 06 мая 2009

По первому вопросу C ++ будет выделять ресурсы, используя собственную среду выполнения, которая не имеет ничего общего с JVM - JVM не знает о каких-либо действиях в этом распределителе памяти.

Что касается второго вопроса, сборщик мусора Java не будет собирать память, выделенную C ++. Вы должны будете убедиться, что ваша обертка Java инициирует освобождение памяти. Перед тем как объект GC будет обработан java, среда выполнения вызывает метод finalize(). По умолчанию один наследуется от java.lang.Object и в основном ничего не делает. Вы можете переопределить это и использовать его как ловушку, чтобы инициировать освобождение вашей памяти, управляемой вручную.

...