A compiler for object-oriented programming code in a language which employs
run-time static initialization semantics analyzes the static
initialization code to find a subset of initialization statements which
must execute under all conditions, creates an pre-initialized image of the
static storage using the subset, and removes statements which were
pre-initialized from the final compiled code. Preferably, the compiler is
a back-end compiler for the Java language, which converts Java bytecode
into machine executable instructions. A static initializer method for each
class is decomposed to construct a control flow graph for the method,
which is then analyzed to identify statements in the source which must
necessarily execute whenever the initialization method is called. The
compile-time static storage image is pre-initialized to zero, except where
affected by these identified statements, which are set at compile time as
if the identified statements had executed. The identified statements are
then removed from the code being compiled. Code size is thus reduced at
the same time that performance at run time is improved as a result of not
having to execute the removed initialization statements.
Un compilateur pour le code de programmation orienté objectivement dans une langue qui utilise la sémantique statique d'exécution d'initialisation analyse le code d'initialisation statique pour trouver un sous-ensemble de rapports d'initialisation qui doivent s'exécuter dans toutes les conditions, crée une image préinitialisée du stockage statique en utilisant le sous-ensemble, et enlève les rapports qui étaient préinitialisés du code compilé final. De préférence, le compilateur est un compilateur principal pour la langue de Java, qui convertit le bytecode de Java en instructions exécutables de machine. Une méthode statique d'initialiseur pour chaque classe est décomposée pour construire un graphique d'écoulement de commande pour la méthode, qui est alors analysée pour identifier des rapports dans la source qui doit nécessairement exécuter toutes les fois que la méthode d'initialisation s'appelle. L'image statique au moment de la compilation de stockage est préinitialisée à zéro, à moins qu'où affecté par ces rapports identifiés, aux lesquels sont placés compiliez le temps comme si les rapports identifiés s'étaient exécutés. Les rapports identifiés sont alors enlevés du code étant compilé. Le nombre d'instructions est ainsi réduit pendant que l'exécution au temps d'exécution est améliorée en raison pas de devoir exécuter les rapports enlevés d'initialisation.