Как в JNI кэшировать class, methodID и fieldID в соответствии с рекомендациями IBM по производительности?

я прочитал в на IBM, что

Для доступа к полям объектов Java и вызова их методов, собственный код должны выполнять вызовы FindClass(), GetFieldID(), GetMethodId() и ПолучитьIDСтатическогоМетода(). В случае GetFieldID(), GetMethodID() и GetStaticMethodID(), идентификаторы, возвращаемые для данного класса, не изменяются. на время жизни процесса JVM. Но призыв получить поле или метод может потребовать значительной работы в JVM, поскольку поля и методы могли быть унаследованы от суперклассов, что делает JVM Поднимитесь по иерархии классов, чтобы найти их. Потому что идентификаторы одинаковы для данного класса вы должны просмотреть их один раз, а затем повторно использовать. Точно так же поиск объектов класса может быть дорогостоящим, поэтому их следует также кэшироваться.

Как кэшироватьобъекты methodID, fieldIDи classв JNI? Существуют ли встроенные методы или специальная процедура, которой необходимо следовать?

21
задан JoshDM 13 December 2012 в 19:45
поделиться