Maison Java javaDidacticiel Analyse du mécanisme d'exécution du programme et des erreurs en Java

Analyse du mécanisme d'exécution du programme et des erreurs en Java

Sep 26, 2017 am 10:05 AM
java 运行机制 错误

Cet article présente principalement le contenu pertinent de la machine virtuelle Java (JVM) ainsi que le mécanisme d'exécution et l'analyse des erreurs des programmes Java. Les amis qui en ont besoin peuvent en savoir plus.

JVM (Java Virtual Machine ) Une spécification pour les appareils informatiques qui peuvent être implémentés de différentes manières (logicielles ou matérielles). La compilation du jeu d’instructions pour une machine virtuelle est très similaire à la compilation du jeu d’instructions pour un microprocesseur. La machine virtuelle Java comprend un ensemble d'instructions de bytecode, un ensemble de registres, une pile, un tas de garbage collection et un champ de méthode de stockage.

La machine virtuelle Java (JVM) est un ordinateur imaginaire capable d'exécuter du code Java. Tant que l'interpréteur est porté sur un ordinateur spécifique conformément à la spécification JVM, tout code Java compilé peut être assuré de s'exécuter sur ce système.

1. Pourquoi utiliser la machine virtuelle Java

Une caractéristique très importante du langage Java est son indépendance par rapport à la plateforme. L'utilisation de la machine virtuelle Java est la clé pour réaliser cette fonctionnalité. Si un langage général de haut niveau souhaite fonctionner sur différentes plates-formes, il doit au moins être compilé en différents codes cibles. Après l'introduction de la machine virtuelle du langage Java, le langage Java n'a plus besoin d'être recompilé lorsqu'il est exécuté sur différentes plates-formes. Modèle d'utilisation du langage Java La machine virtuelle Java protège les informations liées à des plates-formes spécifiques, de sorte que le compilateur du langage Java n'a besoin que de générer le code cible (bytecode) qui s'exécute sur la machine virtuelle Java et peut s'exécuter sur plusieurs plates-formes sans modification. Lorsque la machine virtuelle Java exécute le bytecode, elle interprète le bytecode en instructions machine à exécuter sur la plate-forme spécifique.

Mécanisme d'exécution Java

L'exécution d'un programme Java doit passer par trois étapes : l'écriture, la compilation et l'exécution.

L'écriture fait référence à la saisie du code du programme dans l'environnement de développement Java, et enfin à la formation d'un fichier source Java avec le suffixe .java.

La compilation fait référence au processus d'utilisation du compilateur Java pour dépanner les fichiers sources. Après la compilation, un fichier de bytecode avec le suffixe .class sera généré. Ce n'est pas comme le langage C qui génère finalement un. document exécutable.

L'exécution fait référence à l'utilisation d'un interpréteur Java pour traduire un fichier de bytecode en code machine, l'exécuter et afficher les résultats

Un fichier de bytecode est une sorte de code machine qui est compatible avec n'importe quelle machine spécifique. Le code intermédiaire est indépendant de l'environnement et de l'environnement du système d'exploitation. Il s'agit d'un fichier binaire et d'un fichier de code objet généré après la compilation du fichier source Java par le compilateur Java. Ni les programmeurs ni les ordinateurs ne peuvent lire directement les fichiers de bytecode. Il doit être interprété et exécuté par un interpréteur Java dédié. Par conséquent, Java est un langage qui est interprété et exécuté sur la base d'une compilation.

L'interpréteur Java est chargé de traduire les fichiers de bytecode en code machine dans des environnements matériels et des plates-formes de système d'exploitation spécifiques pour l'exécution. Par conséquent, les programmes Java ne peuvent pas s'exécuter directement sur les plates-formes de système d'exploitation existantes. Ils doivent s'exécuter sur une plate-forme logicielle appelée machine virtuelle Java.

La machine virtuelle Java (JVM) est un environnement logiciel permettant d'exécuter des programmes Java, et l'interpréteur Java fait partie de la machine virtuelle Java. Lors de l'exécution d'un programme Java, la JVM sera d'abord démarrée, puis elle sera responsable de l'interprétation et de l'exécution du bytecode Java, et le bytecode Java ne peut s'exécuter que sur la JVM. De cette manière, la JVM peut être utilisée pour séparer le programme de bytecode Java de la plate-forme matérielle spécifique et de l'environnement du système d'exploitation. Tant que la JVM d'une plate-forme spécifique est installée sur différents ordinateurs, le programme Java peut s'exécuter sans tenir compte des spécificités actuelles. La plate-forme matérielle et l'environnement du système d'exploitation n'ont pas besoin de prendre en compte la plate-forme sur laquelle le fichier de bytecode a été généré. La JVM masque les différences spécifiques entre les différentes plates-formes logicielles et matérielles, réalisant ainsi une véritable transplantation multiplateforme au niveau du code binaire. JVM est la base indépendante de la plate-forme de Java. Les fonctionnalités multiplateformes de Java sont obtenues en exécutant des programmes Java dans la JVM.

L'approche « écrire une fois, exécuter n'importe où » du langage Java résout efficacement le besoin de la plupart des langages de programmation de haut niveau de cibler différents Le système compile et génère différents codes machine, c'est-à-dire le problème hétérogène de l'environnement matériel et de la plate-forme d'exploitation, ce qui réduit considérablement les frais généraux de développement, de maintenance et de gestion des programmes.

Il convient de noter que les programmes Java peuvent obtenir des fonctionnalités multiplateformes via JVM, mais JVM n'est pas multiplateforme. En d’autres termes, les JVM sur différents systèmes d’exploitation sont différentes. Les JVM sur les plates-formes Windows ne peuvent pas être utilisées sous Linux, et vice versa.

Analyse des erreurs de fonctionnement du programme JAVA

De manière générale, un projet à grande échelle qui a été mis en service peut rencontrer des problèmes dans les situations suivantes :

1. Utilisation anormale du processeur

1) Vérifiez l'utilisation du processeur, l'utilisation du processus cible, puis vérifiez l'utilisation de chaque cœur. Il peut aider à déterminer s'il s'agit d'un problème lié à un seul thread ou à un problème de pool de threads.

2) Parfois, après que le programme ait fonctionné normalement pendant un certain temps, le processeur monte soudainement verticalement, ce qui peut être lié au verrouillage du programme (si le verrouillage est maintenu pendant un certain temps). peu de temps, il vaut mieux essayer cas+yield Pour implémenter le spin lock)

3) Deadlock, exportez directement la pile d'appels pour trouver une solution au problème.

2. Mémoire anormale

1) Fuite de mémoire, rien à dire, dumper la pile pour trouver le problème

2) Des GC fréquents entraîneront également des performances insuffisantes. Si les GC se produisent fréquemment dans le programme, vous devez faire attention. Si l'augmentation de la taille de la nouvelle génération ne résout toujours pas le problème, vous devez en localiser un grand nombre. codes qui créent des objets temporaires (vous pouvez utiliser la technologie Object Pool pour éviter l'application répétée de mémoire)

3. Arrêt inattendu d'un thread de travail

4. IO anormales

1) Afficher les fichiers ouverts, l'utilisation des opérations IO et l'utilisation du disque. Vous pouvez utiliser la commande df iostat, etc.


2) Pour vérifier s'il existe des programmes occupant la surveillance et l'utilisation du réseau, vous pouvez utiliser la commande netstat, etc.


Utiliser des outils pour analyser les défauts

1.jmap


jmap pid Afficher les informations relatives à l'utilisation de la mémoire dans le processus JAVA par défaut


jmap -histo pid Afficher la mémoire Nombre d'instances actives


jmap -dump:format=b,file=(file name) pid Exporte complètement la mémoire du programme Java. L'analyse complète est divisée en trois processus. Exécutez jmap -dump:format=b,file=a.bin une fois après l'initialisation du programme, puis exécutez-le une fois lorsque l'utilisation de la mémoire commence à augmenter, et enfin exécutez-le à nouveau après avoir atteint le limite supérieure. Utilisez JHat ou un outil tiers pour ouvrir le fichier de vidage.


3.jstack ou JCONSOLE


Par défaut, vous pouvez afficher les informations de la pile d'appels de processus pour analyser les délais d'attente d'E/S, les blocages ou d'autres situations. Les informations qui doivent être analysées lorsqu'une anomalie se produit dans un programme peuvent aider à localiser et à résoudre les problèmes.


jstat -gc pid gaptime Afficher les informations relatives au GC


jstat -compiler pid Afficher les informations de compilation en temps réel


4.kill - 3


Idem que ci-dessus, adapté aux serveurs sur lesquels l'outil de développement n'est pas installé. Il peut générer des informations sur la pile d'appels et une partie des informations GC


5.iftop View port réseau

Afficher le trafic réseau entrant et sortant Le trafic entre le serveur cible et le serveur cible peut aider à déterminer s'il est causé par une attaque

pile de machines virtuelles pstack

<.>
nécessite l'installation de gdb, qui est généralement utilisé pour vérifier les programmes c/c++, lorsque certaines erreurs au niveau de la machine virtuelle se produisent.

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

See all articles