当前位置: 首页 > 知识库问答 >
问题:

通过使用公共变量增强性能?

翁翰
2023-03-14

关于Java,我非常习惯于将我的所有变量声明为私有的,并生成公共的getters和setters以符合通用的约定。

不过,我觉得很奇怪:对于除了赋值和返回请求值之外没有其他功能的getters和setters,调用以下方法不会影响性能吗:

String getValue() {
    return value;
}

而不是:

classInstance.value;

编译器是否在这里做了一些事情来帮助函数调用不增加额外的周期?如果不是的话,那么在更健壮的应用程序中,这一理论不就是雪球吗?

编辑:: 为了澄清,这个问题不是问为什么应该或不应该使用访问器方法,问题是使用访问器是否会影响性能。

共有2个答案

谭景明
2023-03-14

我不知道Java是否能做到这一点,但C可以内联这类东西。

我也喜欢使用getters和setters,但是它们比普通变量慢。

因此,如果您正在创建API,请使用getters和setters,如果您需要性能和可读性,请选择公共变量并不那么重要。

干浩然
2023-03-14

编译器是否在此处执行某些操作来帮助防止函数调用添加额外的循环?

Hotspot即时编译器将内联短方法,而简单的getter或setter足够短,可以做到这一点。内联方法体可以消除参数程序集和方法调用的开销,并允许在调用方法的上下文中进行进一步的本地优化。

最终结果是在现代JVM(tm)上使用getter和setter不会影响性能

(一些早期的Android编译器没有这样做,但这已经得到纠正。)

 类似资料:
  • 我目前正在从log4j1.2迁移到log4j2。我们使用ApacheCommonsLogging1.1(JCL),以Log4j2作为实现。 现在,当执行单元测试时,像这样的语句 如果日志级别过高(例如,在本例中为警告),则会在覆盖率报告中显示为未覆盖的行,因为不会执行正文。 因此,在log4j1中,我公司的某个人编写了一个自定义记录器,它将为所有方法,如果它检测到它是从Maven Surefire

  • 4.2.3 用函数增强程序的通用性 我们说过,程序 4.4 在减少重复代码和模块化两方面已经做得很好,但这并不意味着该 程序在各方面都已经完美。例如,如果我们希望换用字符"^"再画一棵树,以便比较哪个更 好看些,该如何做呢?显见的做法是仿照用"*"画树的代码重写画树冠的函数,而树干部分 可以重用。于是得到下面的代码: 【程序 4.5】tree5.py def treetop1(): pr

  • 我试图用随机数创建10个变量,所有变量都以同一个单词开头,比如: -Foo1 -Foo2 -Foo3 -Foo4 我正在努力的是: 但是我不能让这个工作。 你们知道如何解决这个问题吗? 提前谢谢!

  • 1.id <text id="top">Top</text> id是weex标签(即控件)在template下的唯一标识符,可以通过id来引用对应的weex标签。 var top=this.$el('top')//通过this.el('id')找到标签 dom.scrollToElement(top)//滚动到指定的标签 2.style style="width:200;height:20

  • 我试图在我的FreeMarker模板中调用一个Java方法,该模板使用公共静态Java变量作为其参数之一。例如,如果FreeMarker代码在

  • 问题内容: 如何在Linux中的系统库上强制使用本地库? 我将可执行文件显式链接到我的project / lib目录中的某些.so文件,例如(../lib/libluajit.so)。 在gdb或使用ldd下运行我的可执行文件表明它仍然使用系统libluajit-5.1.so.2 然后,将LD_LIBRARY_PATH设置到我的project / lib目录并导出它,然后运行我的可执行文件。不知何