:: Enseignements :: Master :: M2 :: 2014-2015 :: Machine Virtuelle (et bazard autour ...) ::
[LOGO]

Lab 2b - Stack Interpreter (le retour)


On souhaite continuer l'implantation de l'interpreteur à pile.
Une base de code est disponible: vm2015-lab2b.zip
Voici une video de Gil Tene de Azul System qui explique les différents principes des Garbage Collectors.
Understanding Garbage Collection par Gil Tene


Exercice 1 - Garbage Collector

Dans un premier temps, on souhaite implanter les opérations NEW et GET qui va permette d'allouer une instance d'un Record (une sorte de classe sans nom) et d'accéder à un champ d'une instance

  1. Où doit on créer les instances d'un Record ?
    Modifier le code de l'interpreteur pour ajouter la structure correspondante
    Comment faire la différence entre une valeur representant un petit entier, une valeur representant une valeur dans le dictionnaire et une valeur qui est une instance de Record.
    Doit-on modifier TagValues pour cela ?
  2. Ecrire le code correspondant au script Script suivant:
              a = { 2, 3 }
             
  3. Puis ajouter le code permettant de gérer l'instruction NEW dans l'interpreteur.
    Comment doit-on representer la classe d'un Record dans le tas ?
  4. Ecrire le code correspondant au script suivant
              a = { 2, 3 }
              print(a)
             
    Que doit-on modifier dans l'interpreteur pour pouvoir l'exécuter ?
  5. Ecrire le code correspondant au script suivant
              a = { 2, 3 }
              b, c = a
             
    Que doit-on modifier pour pouvoir l'exécuter ?

Exercice 2 - Stack Trace

On souhaite que lorsqu'une erreur se produise, on affiche le stack trace correspondant.

  1. Quelle structure de l'interpreteur doit on parcourir pour obtenir le stack trace ?
  2. Ecrire le code qui permet de générer le stacktrace.
  3. Comment faire pour injecter le stack trace dans une instance de la classe java.lang.Throwable ?

Exercice 3 - Garbage Collector

On veut maintenant implanter un simple garbage collector.

  1. A quel moment doit-on declencher l'algorithme de Garbage Collection.
  2. On souhaite implanter un algorithme dit Mark & Compact, rappeler en quoi cela consiste.
  3. Comment doit-on modifier la structure d'un objet pour être capable de marquer les instances *et* faire une collection sur place ?
  4. Implanter l'algorithme de marquage des objets à partir de la pile.
  5. Implanter l'algorithme qui permet de calculer l'adresse future des instances.
  6. Implanter l'algorithme qui compact le tas.