-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Analyse startet bei der main()-Methode. Alle verwendeten Methoden werden dann von der main()-Methode aus aufgerufen und demnach analysiert.
Bei jedem Methodenaufruf wird das Ergebnis der Methode (MethodSummary) auf die aufrufende Methode angewendet. Der Objektgraph mit den ARG_ESCAPE Objekten wird dabei an die entsprechenden Argumente angehängt. Die Mengen der lokalen und globalen Objekte der aufgerufenen Methode werden zu den aktuellen hinzugefügt.
Das MethodSummary der main()-Methode enthält dann alle lokalen (localObjects) und globalen (escapedObjects) Objekte der aufgerufenen Methoden und von sich selbst.
Da es sich bei dem "args"-Argument der main()-Methode um ein String-Array handelt, können nur weitere Objekte vom Typ String zugewiesen werden. Da String Immutable und final ist, müssen diese Objekte jedoch nicht betrachtet werden.
Es werden alle Methoden aller Klassen analysiert. Bei Methoden die von außen aufgerufen werden, kann keine Aussage über die Objekte mit ARG_ESCAPE getroffen werden. Denn sie hängen von den Parametern ab, die nicht verfügbar sind.
Es können Strict Thread Confined Objekte ermittelt werden.
Mehrere Startpunkte für das Programm. Es kann für jeden Startpunkt Methode 1 (Programm) durchgeführt werden, oder für alles Methode 2 (API).
Das Ergebnis einer Analyse (MethodSummary) besteht aus 3 verschiedenen Mengen von Objekten:
-
NO_ESCAPE Alle Objekte, die lokal erzeugt wurden und nur an andere lokale Objekte zugewiesen wurden. (Strict Thread Confined)
-
ARG_ESCAPE Alle Parameter und deren zugewiesenen Objekte. Die Parameter werden durch die konkreten Objekte der aufrufenden Methode ersetzt.
-
GLOBAL_ESCAPE Objekte die an ein statisches Feld, an ein Objekt vom Typ Runnable (Thread) oder an ein anderes Objekt mit GLOBAL_ESCAPE zugewiesen wurden. (Thread Global)
-
PhantomObject (Parameter)
-->
statischer Typ -
GlobalObject (statisches Feld)
-->
statischer Typ -
InternalObject (lokales Objekt)
-->
laufzeit Typ
-
invokeInstruction
-->
liefert statischen Typ der Variablen -
newInstruction
-->
liefert Typ des zu erzeugenden Objektes-->
in ObjectNode speichern