Как бы я вызвал метод Java, используя длинный адрес памяти?

Допустим, у меня был адрес памяти, который был длинным в Java. Если я знаю, что адрес памяти был указателем на функцию, как я мог бы вызвать функцию по этому адресу?

Причина, по которой я заинтересован в этом, заключается в работе с объектами вне кучи. Я должен создавать объекты в прямых байтовых буферах, которые не будут подчиняться GC. Это позволит мне отменить время паузы GC, поскольку GC никогда не будет работать, если я не создаю какие-либо объекты в куче.

1 ответ

Вы бы не стали в чистой Java. Это почти противоположность того, что есть в Java. Вы можете сделать это с JNI, если вы действительно этого хотите. В идеале вы должны изменить свой дизайн так, чтобы вам не нужно было это делать - это довольно странное требование в большинстве ситуаций.

Теперь, когда вы отредактировали пост и, кажется, вы в основном хотите добиться большего успеха, чем сборщик мусора на виртуальной машине, я настоятельно рекомендую вам этого избежать. Это может потребовать огромных усилий и привести к очень хрупкой системе, которая требует различных двоичных файлов для каждой среды. В любом случае вам будет трудно использовать значения вне кучи в качестве реальных объектов, так как в этот момент JVM вполне может делать различные предположения относительно данных. Если вы заботитесь только о примитивных значениях, у вас всегда может быть большой байтовый массив, который будет действовать как "сырое" хранилище с соответствующим кодом-оберткой для преобразования между данными в этом массиве и примитивными значениями... все без JNI.

Другие вопросы по тегам