摘要: 移植FFI 在说明如何对FFI进行移植之前需要先说明FFI的实现原理。JEP424是外部函数访问+本地内存,但是实际上需要移植的内容只有外部函数访问,对于本地内存的操作并不需要修改。 从java中调用native方法叫做downcall,而从native方法中调用java方法叫做upcall,下面通 阅读全文
posted @ 2022-09-21 23:09 aana 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 记忆集和读写屏障 由于对堆使用了分代管理,所以在对新生代进行GC的时候需要将老年代对新生代中对象的引用也当做根来看待,所以在根标记的过程中也需要对老年代的引用进行标记,为了快速遍历老年代,所以需要使用记忆集来记录老年代的哪些部分可能含有对新生代的引用,同时引用可能被修改所以就需要有读写屏障来对引用关 阅读全文
posted @ 2022-09-21 23:01 aana 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 堆创建 如何创建堆的过程虽然并不困难,但是涉及到的类比较多所有最好还是记录一下吧,万一忘了就麻烦了,只讨论使用Serial收集器的堆。 首先来列举一下关于堆管理的几个类好了: Heap Generation Space Heap Heap是关于堆的抽象,在JVM中只有CollectedHeap,继承 阅读全文
posted @ 2022-09-21 23:00 aana 阅读(112) 评论(1) 推荐(0) 编辑
摘要: VM例程调用 也就是模板解释器代码(或者被jit编译的代码)执行过程中调用VM例程的过程。 从模板解释器调用 一些模板解释器的代码会调用虚拟机中的例程,比如newarray: void TemplateTable::newarray() { transition(itos, atos); Regis 阅读全文
posted @ 2022-09-21 22:58 aana 阅读(95) 评论(0) 推荐(0) 编辑
摘要: native方法到java方法 最为经典的一个JNI调用Java方法就是调用Main函数,下面顺便会介绍java的启动过程。 java的main函数在src/java.base/share/native/launcher/main.c,这个函数会处理一些有参数的内容,然后进入到libjli的JLI_ 阅读全文
posted @ 2022-09-21 22:57 aana 阅读(341) 评论(0) 推荐(0) 编辑
摘要: java方法到native方法 很多时候Java方法也会调用到native方法,比如说常用的arraycopy: @IntrinsicCandidate public static native void arraycopy(Object src, int srcPos, Object dest, 阅读全文
posted @ 2022-09-21 22:51 aana 阅读(262) 评论(0) 推荐(0) 编辑
摘要: Java方法之间 解释方法到解释方法 进入 解释方法到解释方法是最为简单的一种情况,最常见的调用是invokevirtual。有关的代码在TemplateTable::invokevirtual中: void TemplateTable::invokevirtual(int byte_no) { t 阅读全文
posted @ 2022-09-21 22:49 aana 阅读(149) 评论(0) 推荐(0) 编辑
摘要: JVM方法调用 以下内容基本上是对于[1]的整理和一些补充。 下面的内容以x86为例,其他平台下会有所不同,可能有一些内容暂时还不好理解,不过配合其他内容多看几遍应该还是不成问题的。 首先来看看解释器栈的结构和编译方法栈的结构,先将图放在这里方便用来参考。 和解释器栈布局有关的文件是src/hots 阅读全文
posted @ 2022-09-21 22:47 aana 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 如何实现在32位平台实现64位的整数运算? 在如mips32、x86这样的32位处理器上并没有64位的寄存器,也没有对64位整数进行运算的指令,但是一些类似于java的编程语言却有64位整数的数据类型并且可以对64位整数进行计算,遇到这种情况我们只能对64位整数的运算进行模拟。 这篇文章中主要考虑m 阅读全文
posted @ 2022-06-14 11:00 aana 阅读(2030) 评论(2) 推荐(0) 编辑
摘要: 线性扫描寄存器分配(2):利用live interval hole进行改进 下面的主要内容来自于*Traub et al.*的[1],会详细的说明如何利用hole和interval split来改善寄存器分配的质量。另外,Hotspot的C1编译器也很大程度上借鉴了这个算法进行寄存器分配,只是细节上 阅读全文
posted @ 2022-05-26 23:49 aana 阅读(752) 评论(0) 推荐(0) 编辑