上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 81 下一页
摘要: 生成字节码的逻辑大部分都在com.sun.tools.javac.jvm包中,核心对应Gen类, 但具体内容在ClassWriter.writeClass()完成.其中ClassWriter.writeClassFile()负责输出字节码。 要从AST生成字节码了,那么还需要完成一次转换,就是把AS 阅读全文
posted @ 2022-04-15 15:16 Mars.wang 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 去除语法糖分为三个阶段的内容,分别是: TRANSTYPES, //泛型擦除 UNLAMBDA, //lambda表达式转换成方法 LOWER, //内部类、foreach循环、断言等 核心的逻辑分别对应到三个类: com.sun.tools.javac.comp.TransTypes com.su 阅读全文
posted @ 2022-04-15 15:14 Mars.wang 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 数据流分析flow(),对应Flow.analyzeTree()方法。 数据流分析分四个阶段,分别是活跃性分析、赋值分析、异常分析、本地变量捕获分析。 public void analyzeTree(Env<AttrContext> env, TreeMaker make) { new AliveA 阅读全文
posted @ 2022-04-15 15:13 Mars.wang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 二、属性分析 属性分析attribute(),核心逻辑在Attr类的attrib()方法。 com.sun.tools.javac.comp.Attr 类的代码。在这个类的头注释里,你会发现原来 ATTR 做了四件事: Check:类型检查。 Resolve:做名称的消解, ConstFold:常量 阅读全文
posted @ 2022-04-15 15:12 Mars.wang 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 注解处理processAnnotations(),其核心逻辑在com.sun.tools.javac.processing.JavacProcessingEnvironment类的doProcessing()方法中。 阅读全文
posted @ 2022-04-15 15:11 Mars.wang 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 一、生成符号表 填充符号表的核心逻辑在com.sun.tools.javac.comp.Enter类。 在讨论填充符号表的逻辑之前,首先要明确一下,什么是符号? 我们在java代码中,可能会声明一个类,类中有属性和方法,这些对于计算机而言,都是一种符号。 在java编译器的实现中,定义了专门的符号类 阅读全文
posted @ 2022-04-15 11:02 Mars.wang 阅读(721) 评论(0) 推荐(0) 编辑
摘要: java语法解析器的核心类是com.sun.tools.javac.parser.JavacParser,令人惊讶的是java并没有使用antlr这样现成的的工具,而是选择手写。推测可能是为了性能的考虑吧。 接下来,让我们膜拜下大师的代码。 JavacParser.parseCompilationU 阅读全文
posted @ 2022-04-14 16:44 Mars.wang 阅读(1001) 评论(0) 推荐(0) 编辑
摘要: java前端编译器的入口在com.sun.tools.javac.Main,然而跟着main方法走下去,你会发现真正的实现内容在com.sun.tools.javac.main.JavaCompiler类的compile()方法中。 借用《深入理解java虚拟机》中的一张图片,实际的解析分为多个步骤 阅读全文
posted @ 2022-04-14 16:15 Mars.wang 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 有很多同学想研究java编译器的源码,看反编译的class文件觉得不方便。 其实可以去管网直接下载源码,地址如下: http://hg.openjdk.java.net/jdk8u/jdk8u/langtools/ 点击左侧边栏的zip,下载完成后解压,将com.sun.*下面的代码放在IDE的源码 阅读全文
posted @ 2022-04-14 13:47 Mars.wang 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 参考文档: https://blog.csdn.net/weixin_42584156/article/details/122786519 https://zhuanlan.zhihu.com/p/334634161 一、linux环境neo4j部署 默认账号密码:neo4j/neo4j #解压缩 阅读全文
posted @ 2022-04-13 09:40 Mars.wang 阅读(240) 评论(0) 推荐(0) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 81 下一页