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

Java:使用getter与缓存值

赵刚豪
2023-03-14
问题内容

我有一个返回字符串的吸气剂,并且我正在将它与其他一些String进行比较。我检查返回的值是否为null,因此我的if陈述看起来像这样(如果确实为真,我确实会提前退出)

if (someObject.getFoo() != null && someObject.getFoo().equals(someOtherString)) {
  return;
}

从性能上来说,存储返回的String而不是像这样两次调用getter会更好吗?有关系吗

String foo = someObject.getFoo();
if (foo != null && foo.equals(someOtherString)) {
  return;
}

为了回答评论中的问题,这种检查并不经常执行,并且吸气剂非常简单。我最好奇的是,分配新的局部变量与执行getter的额外时间相比如何。


问题答案:

这完全取决于吸气剂的作用。如果这是一个简单的getter(检索数据成员),那么JVM如果确定代码是性能的热点,便能够即时对其进行内联。这实际上就是为什么将Oracle
/ Sun的JVM称为“
HotSpot”的原因。:-)它将在需要时(在需要时)应用积极的JIT优化。但是,如果吸气剂做了一些复杂的事情,使用它并让它重复进行这项工作自然会比较慢。

当然,如果代码不是热点,那么您不必在意性能是否有所不同。

曾经有人告诉我,内联的getter有时可能比高速缓存到局部变量的值快,但是我从未向自己证明过这一点,也不知道为什么会这样。



 类似资料:
  • 问题内容: 我还没有使用过Redis,但我听说过它,并打算尝试将其作为缓存存储。 我听说Redis使用内存作为缓存存储数据库,那么如果我使用变量作为对象或字典数据类型来存储数据有什么区别?喜欢: Redis有什么优势? 问题答案: Redis是一个 远程 数据结构服务器。这肯定比仅将数据存储在本地内存中要慢(因为它涉及套接字往返来获取/存储数据)。但是,它也带来了一些有趣的属性: 应用程序的所有进

  • 本文向大家介绍详解Java的MyBatis框架中的缓存与缓存的使用改进,包括了详解Java的MyBatis框架中的缓存与缓存的使用改进的使用技巧和注意事项,需要的朋友参考一下 一级缓存与二级缓存 MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis

  • 问题内容: 我想在Web Java应用程序中实现重量级对象的简单缓存。但是我不知道该怎么做。 我是否缺少某些东西或ConcurrentHashMap方法(putIfAbsent等)还不够,是否需要额外的同步? 是否有更好的简单API(在内存存储中,没有外部配置)来执行此操作? P. 问题答案: 如果为要缓存的内容临时拥有多个实例是安全的,则可以执行“无锁”缓存,如下所示: 多个线程可以“竞争”来创

  • classpath : herosphp\cache\CacheFactory herophp的缓存是通过缓存工厂来管理的,CacheFactory 负责创建缓存,默认采用的是单例模式,也就是同一类型的缓存在应用中只会存再一个实例。 $cacher = CacheFactory::create('file', true); 我们为缓存工具定义了一个 ICache接口,它定义了以下接口方法: get

  • 问题内容: 这是一个纯Python特定的设计问题: 和 Python让我们可以用任何一种方式来做。如果要设计Python程序,将使用哪种方法,为什么? 问题答案: 首选属性。这就是他们在那里的目的。 原因是所有属性在Python中都是公共的。以一两个下划线开头的名称只是警告,给定属性是实现细节,在将来的代码版本中可能会保持不变。它不会阻止您实际获取或设置该属性。因此,标准属性访问是访问属性的常规P

  • MiniFramework 支持三种缓存方式,分别是:Memcached、Redis 和 File(磁盘文件存储)。 Memcached $cache = \Mini\Cache::factory ('Memcache', array ( 'host' => 'localhost', //主机 'port' => 11211