相关疑难解决方法(0)

如何在JVM中查看JIT编译的代码?

有没有办法在JVM中看到JIT生成的本机代码?

java assembly jit jvm

77
推荐指数
5
解决办法
2万
查看次数

为什么分支预测比没有分支更快?

灵感来自这个问题: 为什么处理排序数组比处理未排序数组更快?

我写了自己的分支预测实验:

public class BranchPrediction {
    public static void main(final String[] args) {
        long start;
        long sum = 0;

        /* No branch */
        start = System.nanoTime();
        sum = 0;
        for (long i = 0; i < 10000000000L; ++i)
            sum += i;
        System.out.println(System.nanoTime() - start);
        System.out.println(sum);

        /* With branch */
        start = System.nanoTime();
        sum = 0;
        for (long i = 0; i < 10000000000L; ++i)
            if (i >= 0)
                sum += i;
        System.out.println(System.nanoTime() - start);
        System.out.println(sum);

        /* No branch (again) …
Run Code Online (Sandbox Code Playgroud)

java performance

7
推荐指数
1
解决办法
2626
查看次数

在java中,"5/0"语句不会在我的Linux机器上触发SIGFPE信号,为什么?

我写了一个非常简单的c程序:

#include<stdio.h>

int main(){
    int a=2;
    int b=0;
    printf("%d\n", a/b);
}
Run Code Online (Sandbox Code Playgroud)

并使用strace运行它:strace ./a.out并获得以下输出(仅粘贴尾部)

... ...
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7f04c7fb8000, 4096, PROT_READ) = 0
munmap(0x7f04c7f96000, 127640)          = 0
--- SIGFPE (Floating point exception) @ 0 (0) ---
+++ killed by SIGFPE +++
Floating point exception
Run Code Online (Sandbox Code Playgroud)

输出符合我的预期,因为它被SIGFPE信号杀死.

但是,用Java编写的相同程序,没有得到SIGFPE信号,有没有人知道java进程如何"除以零"异常?

public class Main {

  public static void main(String[] args) {
    int a = 2;
    int b = 0;
    System.out.println(a / b);
  }
}
Run Code Online (Sandbox Code Playgroud)

strace java -Xcomp Main

... ...
mprotect(0xf6949000, 8171520, PROT_READ|PROT_WRITE) …
Run Code Online (Sandbox Code Playgroud)

c java linux signals exception-handling

6
推荐指数
3
解决办法
2119
查看次数

标签 统计

java ×3

assembly ×1

c ×1

exception-handling ×1

jit ×1

jvm ×1

linux ×1

performance ×1

signals ×1