Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 性能:递归调用方法与使用条件逻辑调用方法_Java_Performance - Fatal编程技术网

Java 性能:递归调用方法与使用条件逻辑调用方法

Java 性能:递归调用方法与使用条件逻辑调用方法,java,performance,Java,Performance,我使用变量x调用一个方法,我进行一些检查,如果某些条件为真,我必须使用不同的变量值执行同一方法的一部分 什么更有效 再次调用该方法(递归),或 要更改我的变量的值并让程序执行以下方法行吗 在这两种情况下,我都可以让它工作,但什么是更有效的方式 对于第二种情况,我在顶部使用if语句。我读取所需的值,然后使用该值执行以下if语句 public void mymethod(x){ if (con){ x = something; } if (con2){

我使用变量
x
调用一个方法,我进行一些检查,如果某些条件为真,我必须使用不同的变量值执行同一方法的一部分

什么更有效

  • 再次调用该方法(递归),或
  • 要更改我的变量的值并让程序执行以下方法行吗 在这两种情况下,我都可以让它工作,但什么是更有效的方式

    对于第二种情况,我在顶部使用
    if
    语句。我读取所需的值,然后使用该值执行以下if语句

    public void mymethod(x){
        if (con){
            x = something;
        }
        if (con2){
            //do something
        } else if(con3) {
            //do something
        }
    }
    

    正如Dave所说,您可能根本不应该关心这些微优化。最好的做法是以最容易阅读和理解的方式编写代码。在我看来,最好的方法是将“dosomething”部分移动到一个单独的函数中,并将完成其工作所需的所有参数传递给它


    如果您真的想谈效率问题,请注意,现代系统往往严重依赖于缓存,因此过去使用的许多性能方法实际上不再构成改进。相反,它们会让事情变得更糟。

    正如Dave所说,你可能根本不应该担心这种微观优化。最好的做法是以最容易阅读和理解的方式编写代码。在我看来,最好的方法是将“dosomething”部分移动到一个单独的函数中,并将完成其工作所需的所有参数传递给它



    如果您真的想谈效率问题,请注意,现代系统往往严重依赖于缓存,因此过去使用的许多性能方法实际上不再构成改进。相反,它们会使情况恶化。

    修改x的值并继续执行方法更有效。原因很简单。调用函数时,必须将调用方状态保存(保存到堆栈中),然后读取被调用方法的局部变量,从而执行被调用方法。因此,既然已经在被调用的方法myMethod中,那么访问变量x修改其值并继续执行会“更便宜”

    修改x的值并继续执行方法会更有效。原因很简单。调用函数时,必须将调用方状态保存(保存到堆栈中),然后读取被调用方法的局部变量,从而执行被调用方法。因此,已经在被调用的方法myMethod中,访问变量x修改其值并继续执行将“更便宜”

    听起来像是在谈论某种微观优化,这是无用的。安娜,我想“anadromic”是希腊语中“递归”的意思?微优化是针对编译器的,可读性是针对程序员的。做任何更具可读性的事情。不要担心效率。这将是过早的优化。首先明确代码,直到你知道你有一个性能问题。请考虑一下你的问题的格式。在两次单独的编辑之前,这一点尤其难以理解。听起来你在谈论某种微优化,这是毫无用处的。安娜,我想“anadromic”是希腊语中“递归”的意思?微优化是针对编译器的,可读性是针对程序员的。做任何更具可读性的事情。不要担心效率。这将是过早的优化。首先明确代码,直到你知道你有一个性能问题。请考虑一下你的问题的格式。在两次单独的编辑之前,这一点尤其难以理解。没错,最好的部分是HotSpot通常会对开发人员编写的程序进行更好的优化,开发人员试图做到正确、干净,而不是聪明。没错,最好的一点是,HotSpot通常会对开发人员编写的程序进行更好的优化,这些程序试图做到正确、干净而不是聪明。实际上,如果该方法是HotSpot,HotSpot编译器很有可能会将其内联,这意味着它根本不必创建堆栈框架。这就是为什么在JVM语言上进行微优化不是建设性的。请注意,这只适用于Java。其他语言检测尾部递归,并为新方法调用回收堆栈帧。实际上,如果该方法是热点,则热点编译器很有可能将其内联,这意味着它根本不必创建堆栈帧。这就是为什么在JVM语言上进行微优化不是建设性的。请注意,这只适用于Java。其他语言检测尾部递归,并为新方法调用循环堆栈帧。