2016-04-01 30 views
1

Birisi JVM Opcodes ile sayıların nasıl hesaplandığını açıklayabilir mi? Sanırım opcode için 1 bayt ve işlenenler için baytların geri kalanı gibi. Doğrumuyum?JVM bayt kodu açıklaması

Örnek:

Method int add12and13() 
0 bipush 12 
2 bipush 13 
4 invokestatiC#3 // Method Example.addTwoStatic(II)I 
7 ireturn 
+1

Bazı yönergeler sadece 1 bayttır. –

+0

Bu tür konulara ilgi duyuyorsanız, önce [resmi kaynak] (https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html) 'den başlamalısınız. – Holger

+0

İhtiyaçlarınızı karşılarsa bir cevabı kabul etmeyi unutmayın. Aksi halde, neyin hala belirsiz olduğunu sorunuza ekleyin. – Holger

cevap

4

Haklısınız. Bu, yöntemin başlangıcından bytecode ofsetidir.

bipush 1 byte parametresi vardır, bu nedenle 2 bayt alır.

invokestatic 3 bayt alır: sabit bir havuz dizini için opcode + 2 bayt, yani sonraki komutun ofseti bu invokestatic'dan +3 bayt olacaktır.