Я пытаюсь понять, как JVM-код выполняется JVM.Понимание жизненного цикла кода Java в JVM сверху донизу
сказать, я пишу это Java-код:
public class Hello {
public static void main(String args[])
{
int i = 42;
String hello ="World";
System.out.println(hello + i);
}
}
Это байткодом генерируется (с помощью Eclipse Plugin):
// class version 50.0 (50)
// access flags 33
public class cmpe296/Hello {
// compiled from: Hello.java
// access flags 1
public <init>()V
L0
LINENUMBER 3 L0
ALOAD 0
INVOKESPECIAL java/lang/Object.<init>()V
RETURN
L1
LOCALVARIABLE this Lcmpe296/Hello; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// access flags 9
public static main([Ljava/lang/String;)V
L0
LINENUMBER 7 L0
LDC "World"
ASTORE 1
L1
LINENUMBER 8 L1
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ALOAD 1
INVOKEVIRTUAL java/io/PrintStream.println(Ljava/lang/String;)V
L2
LINENUMBER 9 L2
RETURN
L3
LOCALVARIABLE args [Ljava/lang/String; L0 L3 0
LOCALVARIABLE hello Ljava/lang/String; L1 L3 1
MAXSTACK = 2
MAXLOCALS = 2
}
Это единственная информация, я о коде Java. Но я заинтересован в отслеживании жизненного цикла этого Java-кода. то есть когда я определяю: int i = 42
, который вызывается с помощью метода C++ для реализации JVM (open jdk).
Есть ли какой-либо инструмент для анализа кода Java сверху донизу (до создания ассемблерного языка)?
В частности мой вопрос:
- Как байткод интерпретируется JVM
- Какой C++ код вызывается?
Я нахожу материал здесь: Google code of openjdk
I я делаю анализ JVM. – zengr 2010-12-06 02:38:43