[讨论] javac解析Java源码生成classfile的过程
tiancongyun
2014-09-16
大家好,最近在看关于javac的源码,想了解一下在一个java源文件是如何解析成class文件里的那些bytecode的。
我知道javac编译的入口在langtools里的JavaCompiler类里,主要过程包括了解析与填充符号表,处理annotation,分析并生成bytecode delegateCompiler = processAnnotations( enterTrees(stopIfError(CompileState.PARSE, parseFiles(sourceFileObjects))), classnames); delegateCompiler.compile2(); while (!todo.isEmpty()) generate(desugar(flow(attribute(todo.remove())))); 但是我对编译原理方面的知识不是非常了解,所以这些代码跟进去有些地方也不太明白,希望能有高手能带着走一遍。 比如下面这样一个简单的只包含一个for循环的方法: static void mulc(double[] a0, double[] a1) { for (int i = 0; i < a0.length; i++) { a0[i] = (a1[i]*VALUE); } } 是怎样一步步生成这些classfile里的bytecode的(javap解析后的method) static void test_mulc(double[], double[]); Code: 0: iconst_0 1: istore_2 2: iload_2 3: aload_0 4: arraylength 5: if_icmpge 24 8: aload_0 9: iload_2 10: aload_1 11: iload_2 12: daload 13: ldc2_w #18 // double 15.0d 16: dmul 17: dastore 18: iinc 2, 1 21: goto 2 24: return |
|
RednaxelaFX
2014-09-16
请参考我以前写的一组演示稿的前半部分:http://www.valleytalk.org/2011/07/28/java-%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%BC%96%E8%AF%91%EF%BC%8C%E5%8A%A0%E8%BD%BD-%E5%92%8C-%E6%89%A7%E8%A1%8C/
|
|
itxiaohua
2014-10-13
百度jvm指令就知道结果了
|