理解Java Hotspot函数序言

4

我对Java热点生成的函数序言感到困惑。考虑这个虚拟例子:

public static int getLen(String s) {
    return s.length();
}

public static void main(String[] args) {
    for(int i = 0; i < 1_000_000; i++) {
        getLen("abcd");
    }
}

C2生成的getLen代码如下:

[Entry Point]
[Verified Entry Point]
[Constants]
  # {method} {0x00007fbed3fc2318} 'getLen' '(Ljava/lang/String;)I' in 'examples/Main'
  # parm0:    rsi:rsi   = 'java/lang/String'
  #           [sp+0x20]  (sp of caller)
  0x00007fbefd11a960: mov    %eax,-0x14000(%rsp)
  0x00007fbefd11a967: push   %rbp
  0x00007fbefd11a968: sub    $0x10,%rsp         ;*synchronization entry
                                                ; - examples.Main::getLen@-1 (line 6)

  0x00007fbefd11a96c: mov    0xc(%rsi),%r11d    ;*getfield value
                                                ; - java.lang.String::length@1 (line 623)
                                                ; - examples.Main::getLen@1 (line 6)
                                                ; implicit exception: dispatches to 0x00007fbefd11a981
  0x00007fbefd11a970: mov    0xc(%r12,%r11,8),%eax  ;*arraylength
                                                ; - java.lang.String::length@4 (line 623)
                                                ; - examples.Main::getLen@1 (line 6)
                                                ; implicit exception: dispatches to 0x00007fbefd11a991

问题:

  1. mov %eax,-0x14000(%rsp) 的目的是什么?
  2. 样例代码没有同步,那么 sub $0x10,%rsp ;*synchronization 这一行是什么意思?
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接