Java : vers une amélioration des traces de piles ?

Par:
fredericmazue

mer, 09/11/2022 - 11:49

L'intéressante proposition JEP 435 propose une API pour améliorer le suivi de pile asynchrone de la JVM.

Actuellement l'API AsyncGetCallTrace est utilisée par presque tous les profileurs disponibles, à la fois open source et commerciaux, y compris, par exemple, async-profiler. Pourtant cette API présente deux inconvénients majeurs : Il s'agit d'une API interne, non exportée dans un en-tête, et elle ne renvoie que des informations sur les cadres de pile Java, à savoir leurs méthodes et leurs indices de bytecode. Ces limitations compliquent la mise en œuvre des profileurs et des outils associés. Certaines informations supplémentaires peuvent être extraites de la VM HotSpot via un code complexe, mais d'autres informations utiles sont masquées et parfois impossibles à obtenir.

En remplacement, la JEP 435 une nouvelle APi AsyncGetStackTrace, calquée sur l'API AsyncGetCallTrace:

void AsyncGetStackTrace(CallTrace *trace, jint depth, void* ucontext, uint32_t options);

La propostion JEP 435 souligne que l'API AsyncGetStackTrace veut être une API efficace et fiable pour collecter les traces de pile de manière asynchrone et inclure des informations sur les cadres de pile Java et natifs. Son caractère asynchrone permettre par exemple des appels à partir de gestionnaires de signaux. L'API n'affectera pas les performances lorsqu'elle se sera pas utilisée et elle n'augmentera pas de manière significative les besoins en mémoire par rapport à l'API AsyncGetCallTrace existante.

Il ne reste plus qu'à attendre pour savoir si cette proposition est adoptée puis implémentée.