Machine virtuelle Java Virtual Machine (II): bytecode moteur d'exécution

la structure de cadre de l'exécution

    Lorsque le cadre de pile utilisé pour supporter des appels de méthodes de machine virtuelle et méthode pour réaliser une structure de données derrière ce sont les éléments de la pile d'exécution de la machine virtuelle dans la zone de données de la pile de la machine virtuelle. Le stockage d'une méthodologie de trame de pile variable locale, la pile d'opérandes, la liaison dynamique, l'adresse de retour et d'autres informations et méthodes.

Table variable locale

  La capacité de la table de variable locale dans la fente variable comme l'unité minimale. Chaque fente variable doit être capable de stocker un booléen, octet, char, short, int, float, référence ou returnaddress (négligeable, maintenant rarement rencontré). Des exemples de type de référence indique référence à un objet, à savoir un type d'information sur l'adresse de début des données d'objet stockées tas java, objet appartient index ou le type de données stockées dans la zone de procédé, directement ou indirectement, selon les références. Occupe du type décrit ci-dessus présentent une rainure de variable. long et variables doubles occupent deux emplacements consécutifs.

exemple 1

Des exemples de la méthode (méthode modifiée est non statique) Table variable locale bit 0 est présent.

public void soltTest() {
    byte i = 15;
}
Table variable locale
public void soltTest() {
    long i = 15;
}
Table variable locale

  Afin d'économiser de l'espace mémoire consommé trame pile, donc, la variable rainure table de variable locale est réutilisable, les variables définies dans la méthode du corps ne couvre pas entièrement toute la portée des variables de processus prend cette rainure variable peut être réutilisé a.

注意:示例需设置虚拟机参数“-verbose:gc”

exemple 2

public static void main(String[] args) {
    byte[] bytes = new byte[64 * 1024 * 1024];
    System.gc();
}

Sortie de la console:

[GC (System.gc())  72123K->66690K(251392K), 0.0177919 secs]
[Full GC (System.gc())  66690K->66523K(251392K), 0.0042184 secs]

exemple 3

public static void main(String[] args) {
    {
        byte[] bytes = new byte[64 * 1024 * 1024];
    }
    System.gc();
}

Sortie de la console:

[GC (System.gc())  72123K->66674K(251392K), 0.0007715 secs]
[Full GC (System.gc())  66674K->66523K(251392K), 0.0041207 secs]

exemple 4

public static void main(String[] args) {
    {
        byte[] bytes = new byte[64 * 1024 * 1024];
    }
    int a = 0;
    System.gc();
}

Sortie de la console:

[GC (System.gc())  72123K->66690K(251392K), 0.0009232 secs]
[Full GC (System.gc())  66690K->987K(251392K), 0.0042235 secs]

Conclusion: fente variable lorsque aucun multiplexage, aucun GC

pile opérande

Opérande pile est une pile LIFO. sentiment personnel opérande pile table de variable locale est une région intermédiaire et une méthode de la station de transfert de données.

procédé Invocation

  appel méthode ne correspond pas à la méthode de code est exécuté, la seule tâche est de déterminer la méthode que l'on appelle les appels de méthode de phase ne sont pas encore traiter des processus opérationnels spécifiques au sein de la méthode.

Resolve

Appeler une méthode dans le code de programme écrit le compilateur pour compiler le moment finalisé et appeler ces méthodes est appelée résolution. En Java, en ligne avec la méthode « montre la compilation qui fonctionnent sur immuable » nécessite des méthodes essentiellement statiques et des méthodes privées dans deux catégories.

Différents types d'appels de méthode, qui ensemble instruction de bytecode conçu des instructions différentes. Ils sont les suivants:

  • invokestatic: un appel de méthode statique.
  • invokespecial: par exemple appeler le constructeur (méthodes et les méthodes privées de la classe parente).
  • invokevirtual: appeler pour toutes les méthodes virtuelles.
  • invokeinterface: une interface d'appel de méthode, et ensuite déterminer lors de l'exécution d'un objet qui implémente cette interface.
  • invokedynamic: un premier qualificatif de point d'appel de la méthode d'analyse dynamique fait référence à l'exécution, puis d'exécuter la méthode.

Les méthodes statiques, des méthodes privées, constructeur d'instance, la méthode classe mère et finale seront modifiés méthode peut résoudre les références symboliques méthode de référence directe pour la classe au moment du chargement. Ces méthodes sont collectivement appelées « méthodes non virtuelles. »

Je suppose que tu aimes

Origine www.cnblogs.com/chinda/p/12604664.html
conseillé
Classement