Java,最昂贵的语句?

Java,最昂贵的语句?,java,optimization,bytecode,micro-optimization,Java,Optimization,Bytecode,Micro Optimization,Java编程语言中最昂贵的语句(字节码和cpu周期)是什么?可能,至少对于cpu周期而言,是异常处理。可能,至少对于cpu周期而言,是异常处理。我敢打赌sleep()必须是最昂贵的一种!;) 你的问题需要更多的细节。人总是可以写的 while(true) {} 它会无限地消耗CPU周期。你在说什么类型的陈述 任何涉及IO或将序列化代码的东西,如对System.out的调用。我敢打赌sleep()一定是最昂贵的工具之一!;) 你的问题需要更多的细节。人总是可以写的 while(true) {}

Java编程语言中最昂贵的语句(字节码和cpu周期)是什么?

可能,至少对于cpu周期而言,是异常处理。

可能,至少对于cpu周期而言,是异常处理。

我敢打赌sleep()必须是最昂贵的一种!;)

你的问题需要更多的细节。人总是可以写的

while(true) {}
它会无限地消耗CPU周期。你在说什么类型的陈述

任何涉及IO或将序列化代码的东西,如对System.out的调用。

我敢打赌sleep()一定是最昂贵的工具之一!;)

你的问题需要更多的细节。人总是可以写的

while(true) {}
它会无限地消耗CPU周期。你在说什么类型的陈述


任何涉及IO或将序列化代码的内容,如对System.out的调用。

在CPU周期方面:

public class Zombie extends Thread {
    public void run() {
        while (true)
        {(new Zombie()).start();}
    }

    public static void main(String args[]) {
        (new Zombie()).start();
    }
}

,虽然不完全是一句话。

就CPU周期而言:

public class Zombie extends Thread {
    public void run() {
        while (true)
        {(new Zombie()).start();}
    }

    public static void main(String args[]) {
        (new Zombie()).start();
    }
}

,虽然不完全是一句话。

这不是一个简单的答案。这取决于您的虚拟机和底层硬件。您正在使用的VM可能会将字节码编译为机器码,因此问题是:硬件上最昂贵的汇编调用是什么

经典上最差的是计算能力的划分。但是现在计算成本很低,内存也很遥远。因此,现代硬件上最昂贵的调用是错过缓存的内存访问。外挂到主内存需要500-1000个CPU周期

所以有一条线,比如:

x++; x++; …如果x已从缓存中推出,则可能需要数百个周期。最常见的例子是遍历内存中的链表

for (ListElement n = ...; n != null; n = n.next()) { n.val++; } 对于(ListElement n=…;n!=null;n=n.next()){ n、 val++; }
在这里,调用
n.next()
每次可能需要500-1000个周期,因为链表可以稀疏地分布在系统内存中。

这不是一个简单的答案。这取决于您的虚拟机和底层硬件。您正在使用的VM可能会将字节码编译为机器码,因此问题是:硬件上最昂贵的汇编调用是什么

经典上最差的是计算能力的划分。但是现在计算成本很低,内存也很遥远。因此,现代硬件上最昂贵的调用是错过缓存的内存访问。外挂到主内存需要500-1000个CPU周期

所以有一条线,比如:

x++; x++; …如果x已从缓存中推出,则可能需要数百个周期。最常见的例子是遍历内存中的链表

for (ListElement n = ...; n != null; n = n.next()) { n.val++; } 对于(ListElement n=…;n!=null;n=n.next()){ n、 val++; }
在这里,调用
n.next()
每次可能需要500-1000个周期,因为链表可以稀疏地分布在系统内存中。

在任何语言中,您都可以通过多次执行各种语句并查看它们所需的时间来了解它们的速度。我想你的问题比那更聪明。例如,执行了许多调优步骤,在每一步中,主要问题是其他方面

  • 第一步:主要耗时相当于递增迭代器。(修复?使用整数索引。)

  • 修复后,问题是每次构建一个元素的链表。(修复?一次全部构建。)

  • 重新设计后,主要问题是为对象分配和释放存储空间。(修复?重复使用使用的对象。)

在每个阶段,都有一些问题是最大的。在解决了这个问题(并且获得了很好的加速)之后,其他一些问题是新出现的最大问题。修好之后。。。(以此类推,直到你能看到最大的问题是什么,但你无法解决它)


你看,这几乎与“哪些语句最昂贵”无关。如果一个语句正在做你绝对需要做的事情,而你找不到更好的方法来做,那么从定义上来说,它是最适合这项工作的语句。

在任何语言中,你都可以通过多次做不同的语句并观察它们花费的时间来了解它们的速度。我想你的问题比那更聪明。例如,执行了许多调优步骤,在每一步中,主要问题是其他方面

  • 第一步:主要耗时相当于递增迭代器。(修复?使用整数索引。)

  • 修复后,问题是每次构建一个元素的链表。(修复?一次全部构建。)

  • 重新设计后,主要问题是为对象分配和释放存储空间。(修复?重复使用使用的对象。)

在每个阶段,都有一些问题是最大的。在解决了这个问题(并且获得了很好的加速)之后,其他一些问题是新出现的最大问题。修好之后。。。(以此类推,直到你能看到最大的问题是什么,但你无法解决它)


你看,这几乎与“哪些语句最昂贵”无关。如果一条语句正在做你绝对需要做的事情,而你找不到更好的方法来做,那么根据定义,它是最适合这项工作的语句。

OP,看一看,它可能会让你感兴趣,学习Java字节码的细节。

OP,看一看,它可能会让你感兴趣,用于学习Java字节码的详细信息。

我的意思是,如果我比较Java语句生成的字节码,哪个语句会花费更多的时间运行,或者生成更多的字节码?我的意思是,如果我比较Java语句生成的字节码,哪一条语句会花费更多的时间运行,或者会生成更多的字节码?实际上,异常创建可能更昂贵。实际上,异常创建可能更昂贵。太模糊了。请更清楚地说明什么类型的答案