呼叫JavaCalls::call()方法來執行Java方法
之前多次提到接觸到呼叫JavaCalls::call()方法來執行Java方法,如:
(1)Java主類裝載時,呼叫JavaCalls::call()方法執行的Java方法checkAndLoadMain()方法
(2)類的初始化過程中,呼叫JavaCalls::call()方法執行的Java方法<clinit>方法
可以看出,JavaCalls::call()方法為虛擬機器呼叫Java方法提供了便利,Java虛擬機器有invokestatic、invokedynamic、invokestatic、invokespecial、invokevirtual幾種方法呼叫指令,每個負責呼叫不同的方法,而這些方法都定義在JavaCalls類中,如下:
原始碼位置:/src/share/vm/runtime/javaCalls.hpp // All calls to Java have to go via JavaCalls. Sets up the stack frame // and makes sure that the last_Java_frame pointers are chained correctly. class
JavaCalls: AllStatic {
static
void
call_helper(JavaValue* result, methodHandle* method, JavaCallArguments* args, TRAPS);
public
:
// Optimized Constuctor call
static
void
call_default_constructor(JavaThread* thread, methodHandle method, Handle receiver, TRAPS);
// call_special
// ------------
// The receiver must be first oop in argument list
// receiver表示方法的接收者,如A.main()呼叫中,A就是方法的接收者
static
void
call_special(JavaValue* result, KlassHandle klass, Symbol* name,Symbol* signature, JavaCallArguments* args, TRAPS);
static
void
call_special(JavaValue* result, Handle receiver, KlassHandle klass,Symbol* name, Symbol* signature, TRAPS);
// No args
static
void
call_special(JavaValue* result, Handle receiver, KlassHandle klass,Symbol* name, Symbol* signature, Handle arg1, TRAPS);
static
void
call_special(JavaValue* result, Handle receiver, KlassHandle klass,Symbol* name, Symbol* signature, Handle arg1, Handle arg2, TRAPS); |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69929371/viewspace-2890683/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 02 #### `__call__` ,物件(),自動執行call 方法物件
- java反射機制之Method invoke執行呼叫方法例子Java反射
- tweak 中常用的方法呼叫方法和 執行時APIAPI
- call() 方法
- java執行緒執行緒休眠,sleep方法Java執行緒
- java基礎:執行緒方法之yield方法Java執行緒
- 簡述java反射機制之Method invoke執行呼叫方法例子Java反射
- 執行java類的--方法 batJavaBAT
- Java 終止執行緒方法Java執行緒
- Java中多執行緒啟動,為什麼呼叫的是start方法,而不是run方法?Java執行緒
- Java通過join方法來暫停當前執行緒Java執行緒
- java 方法呼叫繫結Java
- Java 非同步呼叫方法Java非同步
- 六種用ruby呼叫執行shell命令的方法
- Java 執行緒建立與常用方法Java執行緒
- Java方法02:方法的定義和呼叫Java
- Java基礎——方法的呼叫Java
- java對過反射呼叫方法Java反射
- JAVA不使用執行緒池來處理的非同步的方法Java執行緒非同步
- JVM程式用一個主執行緒來執行main()方法JVM執行緒AI
- Java如何測量方法執行時間Java
- java實現多執行緒的方法Java執行緒
- java基礎:執行緒方法之joinJava執行緒
- Java多執行緒的實現方法Java執行緒
- 20.Eclipse下Ndk開發(pthread開啟執行緒呼叫Java方法)Eclipsethread執行緒Java
- Java調優—Btrace監控Java執行緒/方法執行引數、執行時間(Windows)Java執行緒Windows
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- 執行時Hook所有Block方法呼叫的技術實現HookBloC
- 呼叫System.gc沒有立即執行的解決方法GC
- 如何在java中呼叫js方法JavaJS
- Java 方法中迴圈呼叫具有事務的方法Java
- php 魔術方法 __callPHP
- 終止java執行緒的2種方法Java執行緒
- Java多執行緒【三種實現方法】Java執行緒
- Java建立多執行緒的一種方法Java執行緒
- JAVA中執行緒建立的2種方法Java執行緒
- Java多執行緒5:synchronized鎖方法塊Java執行緒synchronized
- Java 多執行緒同步的五種方法Java執行緒