呼叫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 方法物件
- call() 方法
- java執行緒執行緒休眠,sleep方法Java執行緒
- Java中多執行緒啟動,為什麼呼叫的是start方法,而不是run方法?Java執行緒
- 20.Eclipse下Ndk開發(pthread開啟執行緒呼叫Java方法)Eclipsethread執行緒Java
- Java 非同步呼叫方法Java非同步
- 六種用ruby呼叫執行shell命令的方法
- Java 執行緒建立與常用方法Java執行緒
- Java方法02:方法的定義和呼叫Java
- Java基礎——方法的呼叫Java
- Java如何測量方法執行時間Java
- JAVA不使用執行緒池來處理的非同步的方法Java執行緒非同步
- JVM程式用一個主執行緒來執行main()方法JVM執行緒AI
- 執行時Hook所有Block方法呼叫的技術實現HookBloC
- 呼叫System.gc沒有立即執行的解決方法GC
- Java 方法中迴圈呼叫具有事務的方法Java
- 【Java】利用反射執行Spring容器Bean指定的方法,支援多種引數自動呼叫Java反射SpringBean
- 終止java執行緒的2種方法Java執行緒
- Java建立多執行緒的一種方法Java執行緒
- Java多執行緒【三種實現方法】Java執行緒
- php 魔術方法 __callPHP
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- C# 帶引數帶互鎖多執行緒呼叫方法C#執行緒
- 在子執行緒呼叫performSelector: withObject: afterDelay 延時方法無效執行緒performSelectorObject
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- Java—執行緒的生命週期及執行緒控制方法詳解Java執行緒
- Java 執行緒池獲取池中所有執行緒列表的方法Java執行緒
- 執行緒同步方法執行緒
- Java專案計算程式執行時間方法Java
- java 執行緒淺解02[方法及屬性]Java執行緒
- 【JAVA併發第二篇】Java執行緒的建立與執行,執行緒狀態與常用方法Java執行緒
- idea執行java專案main方法報build failure錯誤的解決方法IdeaJavaAIUI
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Java多執行緒中wait 和 notify 方法理解Java執行緒AI
- Java虛擬機器--方法區(執行時常量池)Java虛擬機
- Java SpringBoot 中,動態執行 bean 物件中的方法JavaSpring BootBean物件
- Runloop & 方法呼叫OOP
- JS中的call()方法和apply()方法用法總結JSAPP