当前位置: 首页 > 面试题库 >

java方法调用有多昂贵

晏弘雅
2023-03-14
问题内容

我是一个初学者,我一直读到重复代码很不好。但是,为了避免这样做,您通常必须进行额外的方法调用。假设我有以下课程

public class BinarySearchTree<E extends Comparable<E>>{
    private BinaryTree<E> root;
    private final BinaryTree<E> EMPTY = new BinaryTree<E>();
    private int count;
    private Comparator<E> ordering;

    public BinarySearchTree(Comparator<E> order){
        ordering = order;
        clear();
    }

    public void clear(){
        root = EMPTY;
        count = 0;
    }
}

对于我来说,将我的clear()方法中的两行复制并粘贴到构造函数中而不是调用实际方法会更好吗?如果是这样,有什么不同?如果我的构造函数进行了10个方法调用,每个方法仅将实例变量设置为一个值,该怎么办?什么是最佳编程实践?


问题答案:

对于我来说,将我的clear()方法中的两行复制并粘贴到构造函数中而不是调用实际方法会更好吗?

编译器可以执行该优化。JVM也可以。编译器编写者和JVM作者使用的术语是“内联扩展”。

如果是这样,有什么不同?

测量它。通常,您会发现这没有什么区别。而且,如果您认为这是性能热点,那么您就在错误的地方寻找;这就是为什么您需要测量它。

如果我的构造函数进行了10个方法调用,每个方法仅将实例变量设置为一个值,该怎么办?

同样,这取决于生成的字节码和Java虚拟机执行的任何运行时优化。如果编译器/ JVM可以内联方法调用,它将执行优化以避免运行时创建新堆栈帧的开销。

什么是最佳编程实践?

避免过早的优化。最佳实践是编写可读性和设计良好的代码,然后针对应用程序中的性能热点进行优化。



 类似资料:
  • 问题内容: 我想知道如何运作。我不太了解文件系统的工作原理,所以我应该首先开始阅读。 但是为了获得快速的预先信息: 如果在某个日志中注册了该路径和文件名,是否调用文件系统的单个操作?还是操作系统获取目录的内容,然后在目录中进行扫描以进行匹配? 我认为这将取决于文件系统,但是也许所有文件系统都使用快速方法? 我不是在谈论网络和磁带系统。让我们将其保留到ntfs,extX,zfs,jfs :-) 问题

  • 问题内容: 让我们转换为: 此转换操作的费用是多少?是否执行复制?据我在Go规范中所看到的: 字符串的行为就像字节的切片,但是是不可变的 ,这至少应该涉及复制,以确保后续的切片操作不会修改我们的字符串。反向对话会怎样?对话是否涉及编码/解码,如utf8 <->符文? 问题答案: 该不是铸造而是转换。有些转换与强制转换一样,只是重新解释了 原位 。不幸的是,这不是字符串到字节片转换的情况。字节片是可

  • 我在使用Java方法时遇到了麻烦。这段代码应该有三种方法。方法1)输入员工人数。方法2)输入每个员工缺勤天数。方法3)计算缺勤天数的平均值。然后,在Main中,应该打印员工人数、缺勤天数和平均缺勤天数。显然,我不明白方法是如何工作的,因为当我运行代码时,用户在提供员工人数、缺勤天数和平均缺勤天数之前,会被询问4倍的员工人数和2倍的员工缺勤天数。如何更改代码,以便用户只需输入一次信息?

  • 如何使用方法句柄调用私有方法? 据我所知,只有两种可公开访问的实例: 方法andles.lookup 两者都不允许不受限制的私人访问。 还有非公开的这就是我想要的。是否有某种公开的方式获得它(假设SecurityManager允许)?

  • 大家好,我正在使用Java反射来调用方法,并将参数传递给这些方法。下面是示例代码 用于调用方法的一段代码 其中test=“method1”/“method2”/“method3” obj是基类的对象 上面的代码抛出的是NOSuchmethodException

  • 本文向大家介绍Java调用方法,包括了Java调用方法的使用技巧和注意事项,需要的朋友参考一下 示例 使用反射,可以在运行时调用对象的方法。 该示例显示了如何调用String对象的方法。