2017-09-24 7 views
3

La citation provient de: http://blog.ragozin.info/2012/10/safepoints-in-hotspot-jvm.htmlSafepoints dans JVM

statut SafePoint chèque lui-même est mis en œuvre de manière très rusé. La vérification normale des variables de mémoire nécessiterait des barrières de mémoire coûteuses. Cependant, la vérification safepoint est implémentée lorsque la mémoire lit une barrière. Ensuite est nécessaire point de restauration, la page de machine virtuelle Java avec cette adresse provoquant erreur de page sur un fil d'application (qui est gérée par le gestionnaire de machine virtuelle Java). De cette façon, HotSpot maintient son pipeline CPU code JITed convivial, mais assure la mémoire sémantique correcte (page unmap contraint barrière de mémoire aux cœurs de traitement).

J'ai quelques doutes:

  1. D'après ce que je sais faute de page est toujours gérée par OS (et, de ce que j'understsand peut manipulés que par le noyau en raison de la sécurité). Alors, que signifie l'auteur?
  2. Le second est très similaire à la première: Comment JVM est capable de unmap une page?
+0

On suppose que l'auteur voulait dire "segfault", quand le gestionnaire de défaut de page trouve qu'il n'y a pas de mappage pour une page. En ce qui concerne le démappage, voir 'munmap'; Des appels similaires sont disponibles sur Windows. –

+0

doutez-vous de l'exactitude des déclarations faites dans ce blog? ou les acceptez-vous et vous voulez juste des explications comment cela fonctionne? – the8472

Répondre

4
  1. OS gère les défauts de page en premier lieu. Si la raison de cette erreur est un accès mémoire illégal tenté par une application, le système d'exploitation délivre le signal approprié à l'application, généralement SIGSEGV.

    Par défaut, SIGSEGV tue une application. Cependant, une application peut installer son propre gestionnaire de signal. C'est ce que fait la JVM. Il reçoit SIGSEGV et, s'il voit que le signal est provoqué par une instruction d'interrogation safepoint, JVM suspend le thread en cours jusqu'à ce que l'opération safepoint soit terminée.

  2. Un processus peut unmap pages en appelant munmap(). Mais dans ce cas particulier, la JVM ne démonte pas la page, mais change plutôt son état de protection en appelant mprotect() avec PROT_NONE.

+0

Donc, la JVM est rusée :). Il met intentionnellement l'accès à la région spéciale de la mémoire dans les safepoints. De cette façon, si 'mprotect (PROT_NONE)' a été appelé, le thread est interrompu par le système d'exploitation, et la machine virtuelle décide si elle doit exécuter garbage collector. Cela signifie que des points safepoints doivent être insérés dans la boucle pour s'assurer que le thread touche le point de sécurité, oui. – Gilgamesz

+0

Merci pour votre bonne réponse !! :) – Gilgamesz

+0

Est-ce que démapper une page provoque l'écriture sur un disque? – Gilgamesz