2009-08-25 25 views
4

J'essaie de quantifier la différence d'empreinte mémoire d'une petite application Java effectuant le même processus multithread vs multiprocessus.Comment déterminer l'empreinte de la mémoire JVM avec plusieurs processus sous Linux

Tous mes tests sont sous Linux. Lors de l'exécution multithread, il est relativement facile de déterminer l'empreinte globale et le surdébit supplémentaire par thread. Lors de l'exécution du processus à un seul thread, la JVM a une grande empreinte (espace virtuel 200-300M) selon pmap. Si j'exécute plusieurs copies de la même application, je vois l'empreinte mémoire x N et aucun code java n'est partagé entre les processus.

J'ai été informé que puisque le code Java est bytecode, pas exécutable, il ne partage pas le code entre les processus comme vous le feriez avec les binaires C par exemple. Cependant, j'ai été informé par la suite qu'il pourrait utiliser la technologie Copy-On-Write pour obtenir la même chose. Si j'utilise pmap, cela me dit simplement l'empreinte du processus et n'indique pas combien peut être partagé avec un autre processus. Donc, la question est: Comment déterminer combien de données sont partagées via Copy-On-Write entre les processus?

Répondre

-3

Sur un système Linux non intégré correctement configuré, pourquoi vous préoccuper de l'empreinte mémoire?

Quelle différence cela ferait-il si vous aviez une réponse?

Les données ne seraient partagées entre les processus que si l'un était un ancêtre propre de l'autre.
Et il serait en outre déterminé par la disposition de la mémoire du programme Java et des données dans les pages. Tout cela pourrait changer d'une version à l'autre.