Actions
Task #12627
openСпецификация инструкции вызова метода invokestatic
Start date:
09/13/2023
Due date:
% Done:
0%
Estimated time:
Detected in build:
git
Published in build:
Description
На примере инструкции invokestatic
предлагается разобраться с механизмом вызова методов в JVM.
1.
Для этого надо изучить описание методов (метаинформация, хранящаяся в памяти):
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.6
Описать pseudo инструкцию/и для загрузки информации о методе в память, необходимую для его вызова.
2. Описать шаблон, который вызывает метод с помощью этой инструкции.
3. Добавить печать информацию про метод в генерируемый тест.
Например для класса:
public class TestClass01 { public long inc() { long a; long b = 2L; a = b + 5L; a++; return ++a; } }
Байт-код метода inc() выглядит следующим образом:
public long inc(); descriptor: ()J flags: (0x0001) ACC_PUBLIC Code: stack=4, locals=5, args_size=1 0: ldc2_w #2 // long 2l 3: lstore_3 4: lload_3 5: ldc2_w #4 // long 5l 8: ladd 9: lstore_1 10: lload_1 11: lconst_1 12: ladd 13: lstore_1 14: lload_1 15: lconst_1 16: ladd 17: dup2 18: lstore_1 19: lreturn LineNumberTable: line 4: 0 line 5: 4 line 6: 10 line 7: 14 }
Основная часть информации о методе находится тут:
public long inc(); descriptor: ()J flags: (0x0001) ACC_PUBLIC
No data to display
Actions