摘要:
移植FFI 在说明如何对FFI进行移植之前需要先说明FFI的实现原理。JEP424是外部函数访问+本地内存,但是实际上需要移植的内容只有外部函数访问,对于本地内存的操作并不需要修改。 从java中调用native方法叫做downcall,而从native方法中调用java方法叫做upcall,下面通 阅读全文
摘要:
记忆集和读写屏障 由于对堆使用了分代管理,所以在对新生代进行GC的时候需要将老年代对新生代中对象的引用也当做根来看待,所以在根标记的过程中也需要对老年代的引用进行标记,为了快速遍历老年代,所以需要使用记忆集来记录老年代的哪些部分可能含有对新生代的引用,同时引用可能被修改所以就需要有读写屏障来对引用关 阅读全文
摘要:
堆创建 如何创建堆的过程虽然并不困难,但是涉及到的类比较多所有最好还是记录一下吧,万一忘了就麻烦了,只讨论使用Serial收集器的堆。 首先来列举一下关于堆管理的几个类好了: Heap Generation Space Heap Heap是关于堆的抽象,在JVM中只有CollectedHeap,继承 阅读全文
摘要:
VM例程调用 也就是模板解释器代码(或者被jit编译的代码)执行过程中调用VM例程的过程。 从模板解释器调用 一些模板解释器的代码会调用虚拟机中的例程,比如newarray: void TemplateTable::newarray() { transition(itos, atos); Regis 阅读全文
摘要:
native方法到java方法 最为经典的一个JNI调用Java方法就是调用Main函数,下面顺便会介绍java的启动过程。 java的main函数在src/java.base/share/native/launcher/main.c,这个函数会处理一些有参数的内容,然后进入到libjli的JLI_ 阅读全文
摘要:
java方法到native方法 很多时候Java方法也会调用到native方法,比如说常用的arraycopy: @IntrinsicCandidate public static native void arraycopy(Object src, int srcPos, Object dest, 阅读全文
摘要:
Java方法之间 解释方法到解释方法 进入 解释方法到解释方法是最为简单的一种情况,最常见的调用是invokevirtual。有关的代码在TemplateTable::invokevirtual中: void TemplateTable::invokevirtual(int byte_no) { t 阅读全文
摘要:
JVM方法调用 以下内容基本上是对于[1]的整理和一些补充。 下面的内容以x86为例,其他平台下会有所不同,可能有一些内容暂时还不好理解,不过配合其他内容多看几遍应该还是不成问题的。 首先来看看解释器栈的结构和编译方法栈的结构,先将图放在这里方便用来参考。 和解释器栈布局有关的文件是src/hots 阅读全文