兔兔加入了小家庭
侏儒兔小妹妹来了,出生于2022年11月16日,与2023年01月29日来到了小家庭。
侏儒兔小妹妹来了,出生于2022年11月16日,与2023年01月29日来到了小家庭。
在探索OpenJDK时,发现了JVMSpec对java程序处理的很多特性。
这些特性在我认为在JIT模式盛行的现在,这些特性仅会保留到JVM将代码翻译为机器码前。
故GingerbreadVM一定程度上与OpenJDK的实现并不相同。
同时受限于精力的影响,仍有许多功能未进行实现。
这里与常规思维差别很大,0号常量元素用于特殊的一个功能,可参考JavaClass类的继承链特性。
在长整数常量(存储Long)、长浮点数常量(存储Double)中,它的下一个会空出一个元素的索引,目前认为这是在之前的32位纯解释运行的运行时所留下的特性,只不过为了兼容而保留到了现在。
以下为示例,根据索引展示
索引数 | 类型 | 值 |
---|---|---|
1 | UTF8 | ‘java/lang/String’ |
2 | 长整数 Long | 255L |
3 | 空位 | |
4 | 数字 Integer | 255 |
以下为示例,根据内存展示
UTF8(‘java/lang/String’) | Long(255L) | Integer(255) |
---|
虽有3号空位在,但文件、内存上依然是连续的,3仅在读取时需要跳位。
目标是实现兼容部分OpenJDK 1.8的虚拟机。
同时,部分探索到的JVM特性也将开始整理。
使用JDK、ASM生成一个代理类。
在分析Forge的代码时,发现了可以通过反射特殊类达到修改Java枚举类的方案。
思考要不要开放评论系统。
仓库地址:Gayhub