- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
是否有充分的理由(在性能方面)替换 a:
val SOME_CONST = "value"
与
companion object {
val SOME_CONST = "value"
}
添加 @JvmStatic
注释会改变结果吗?
最佳答案
是的,val
存储在 companion object
中更有效。您可以使用Kotlin bytecode viewer找出这些选项被编译成什么。
以下是我注意到的可能会影响性能的事情:
Companion object val
只存储一次,不像实例 val
,它实际上存储在每个实例中,因此增加了实例的内存占用(String
字面量 is stored in constant pool ,但实例会有对它的引用)和实例创建时间(在构造过程中,必须填写一个字段)。
连续多次访问伴随对象 val
与 CPU 缓存相比在不同情况下使用 val
效果更好:它有更好的 locality of reference .取消引用不同的实例以访问其中的 val
可能会导致 CPU 缓存未命中,这对性能不利。
但是,如果 val
仅在同一类的实例方法中使用,所描述的效果几乎不会影响性能,因为这些方法可能会取消引用 this
,并且这甚至可以更好地工作,在访问伴随对象时不会导致可能的缓存未命中。
添加 @JvmStatic
使访问速度更快一些。没有它,访问该值需要获取静态 Companion
引用并在其上调用 getSOME_CONST()
。使用@JvmStatic
,会有静态方法getSOME_CONST()
(跳过Companion
)。还有@JvmField
这使得公共(public)字段可以直接访问,甚至无需调用 getter。
但 JIT 编译器可能会优化前两种情况的 getter 访问,因此注释的效果几乎不会被注意到。
此外,除了性能之外,实例 val
具有值的语义,每个实例可能不同,因此 companion object
似乎适合全局常量值的情况更好。
关于kotlin - 实例 val 是否比伴生对象 val 更 coSTLy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38178188/
我有一个加权图,没有负权重,我想找到从一个节点到另一个节点的路径,试图最小化单个步骤的成本。我不需要最小化旅行的总成本(例如 Dijkstra 所做的),而是最小化平均步骤成本。但是,我有一个约束:K
我想使用 BigQuery 托管其他人可以查询的数据集,而不会对我的项目产生处理费用。我了解当我将数据集上传到项目时,存储成本与项目相关。我希望其他人能够发现我的数据集,通过 访问它他们的项目/帐户(
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
如果我们使用任何连接池框架或 Tomcat JDBC 池,那么打开和关闭数据库连接的成本是多少? 每当需要进行数据库操作时频繁打开和关闭数据库连接是一个好习惯吗? 或者同一个连接可以跨不同方法进行数据
如果我们使用任何连接池框架或 Tomcat JDBC 池,那么打开和关闭数据库连接的成本是多少? 每当需要进行数据库操作时频繁打开和关闭数据库连接是一个好习惯吗? 或者同一个连接可以跨不同方法进行数据
就软件而言,运营成本高昂或资源成本高昂是什么意思。当我遇到一些文档时,他们提到了诸如每次打开文件都是一项昂贵的操作之类的内容。我可以有更多这样的例子(数据库连接是一项昂贵的操作,线程池是一个更便宜的操
我的 redux 状态中有一个数据,大约有 100,000 个 json 记录(每个记录都有大约 8 个键值对)。 我在客户端编写了一个逻辑,每 30 秒刷新一次此数据(每 30 秒我调用服务器以获取
当我的应用程序启动时,我用我的 fragment 首选项中的值填充了一个容器类。我的想法是处理 SharedPreferences 和 PreferenceManager 一次,因为我猜它们很重。 这
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: How expensive is it to dereference a pointer in C++? 如果
我们如何解释 WEKA 中的成本矩阵?如果我有 2 个类要预测(第 0 类和第 1 类)并且想要将第 0 类的分类惩罚为第 1 类(比如惩罚加倍),那么矩阵格式究竟是什么? 是吗 : 0 10 20
我想通过以下方式保护对资源的访问: 所有线程都可以并发读取,更新期间除外(如果更新不是原子的)。 只能给一个线程分配更新任务,直到下一次需要更新。 这似乎是一个使用适当的 lock 或可能使所有操作成
我想知道是否有 (N) 个双 vector ,每个 vector 的长度都很大,例如 10,000,并且我想通过创建 (N) 个线程来对操作进行线程化(每个 vector 乘以 3)。 我想知道使用并
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
假设我们有一个数据库类(在 PHP 中——但它应该与任何语言相关),它在每次有查询时打开到 MySQL 服务器的连接。有些脚本会在每次执行时查询一次数据库,有些会查询两次,在同一次执行中最多可能有 4
我正在编写一个软件,其中有一部分处理读写操作。我想知道这些操作对 csv 文件的成本有多大。还有其他消耗时间更少的文件格式吗?因为我必须在每个周期结束时写入和读取 csv 文件。 最佳答案 读写操作取
我正在学习 C 并且对我在网上阅读的内容感到困惑。 在 http://www.cs.bu.edu/teaching/c/stack/array/ 我可以阅读: Let's look at the fu
我下学期要参加 comp 2210(数据结构),我一直在做在线发布的夏季学期的作业。到目前为止,我在做作业时没有遇到任何问题。看看下面的作业 4,看看你是否能给我一个关于如何处理它的提示。请不要提供完
我需要在页面上放置一个大约 20 个 Vue 组件。每个组件在挂载时都会为自己创建一个 onSnapshot,相应地,当它被删除时会创建一个 unsubscribe()。 const ref = fi
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: How costly is .NET reflection? 我目前的编程心态是反射是我最好的 friend
我刚刚开始掌握 Go(两天前开始,写了不到 1000 行),我还在想一些习语。 我需要按长度降序对一段字符串进行排序。我确实喜欢这样: func ... { ... do business .
我是一名优秀的程序员,十分优秀!