"Si jamais vous connaissez un peu le sujet, quels sont les objets qui doivent etre libere et de quelle facon doivent ils etre libere? En particulier, quand les appels a la JVM ne sont pas des callback, mais des appels direct, quel est le sens des references locales? "
Tu fais des appels natifs vers Java ou Java vers natif ?
Globalement lors d'appels JNI natifs vers Java (un exécutable C se connecte à une JVM ou en créer une, puis appelle les fonctions de la JVM), il faut systématiquement supprimer les références sur tout ce que te retourne la JVM. Si la JVM te retourne une référence locale sur un objet, il faudra appeler DeleteLocalRef sur cette référence dès que tu n'en auras plus besoin. A noter que les jclass sont aussi des références locales, il faut donc les libérer dès que ce n'est plus nécessaire. Les fonctions PushFrame et PopFrame peuvent être utiles pour gérer les références locales.
Si tu fais de l'appel Java vers natif (une JVM fait appel à des fonctions d'une bibliothèque natives) alors tu n'as pas à te soucier (ou presque) de la gestion des références locales dans ton code natif, ces dernières seront supprimées lorsque la fonction native se terminera.