Я пишу оболочку на Java для программы на C ++. Обертка делается с помощью SWIG. У меня есть следующая проблема: когда я вызываю функцию из Java, которая создает большой объект в C ++, Java «не видит», что она выделила много памяти, так как она не выделена в куче Java. Проблема в том, что сборщик мусора не вызывается при удалении объекта, так как со стороны Java имеется много свободной памяти. Я попытался реализовать то, что описано здесь: http://www.swig.org/Doc1.3/Java.html#java_heap_allocations. Идея состоит в том, чтобы выделить пространство памяти для C ++ в куче Java. Поскольку мне не интересно использовать это для каждого new
, я переименовал new
и delete
и использую их явно из моего кода C ++, где это необходимо.
Этот механизм, кажется, работает (я вижу, что куча Java растет и уменьшается сборщиком мусора), но, к сожалению, у меня случайный сбой, который, кажется, происходит во время memcpy
.
Если я вызываю сборщик мусора вручную, моя программа работает, но это не очень чистый метод.
Спасибо за любую подсказку.