首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
WHY42
搜索
用户菜单
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁JVM method dispatch”︁的源代码
←
JVM method dispatch
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
= Method invocation = == invokestatic == invoke a static method: <syntaxhighlight lang="java"> invokestatic indexbyte1 indexbyte2 </syntaxhighlight> invoke a static method, the method is from the constant pool by <syntaxhighlight lang="java">index= (indexbyte1 << 8) | indexbyte2</syntaxhighlight> <syntaxhighlight lang="java"> public class Hello { public static void sayHello(String msg) { System.out.println(msg); } public static void main(String[] args) { sayHello("Riguz!"); } } </syntaxhighlight> compiled: <syntaxhighlight lang="java"> // Riguz! #4 = String #23 // com/riguz/Hello.sayHello:(Ljava/lang/String;)V #5 = Methodref #6.#24 ... public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=1, args_size=1 0: ldc #4 2: invokestatic #5 5: return LineNumberTable: line 9: 0 line 10: 5 } </syntaxhighlight> == invokevirtual == Invoke instance method; dispatch based on class <syntaxhighlight lang="java"> invokevirtual indexbyte1 indexbyte2 </syntaxhighlight> Operand stack: <pre> ..., objectref, [arg1, [arg2 ...]] → </pre> <syntaxhighlight lang="java"> // java/lang/System.out:Ljava/io/PrintStream; #2 = Fieldref #19.#20 // java/io/PrintStream.println:(Ljava/lang/String;)V #3 = Methodref #21.#22 ... public static void sayHello(java.lang.String); descriptor: (Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=1, args_size=1 0: getstatic #2 3: aload_0 4: invokevirtual #3 7: return </syntaxhighlight> == invokespecial == Invoke instance method; special handling for superclass, private, and instance initialization method invocations <pre> public HelloWorld(); descriptor: ()V flags: (0x0001) ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 1: 0 </pre> == invokeinterface == == invokedynamic == [[Category: Bytecode]] [[Category: JVM]]
返回
JVM method dispatch
。