- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于我们有这样的方法,并且我们希望尽可能快且内存高效。 JVM 是否会足够聪明,将其优化为简单的字符串生成器附加,并避免为可变参数创建 Object[] 并避免将原语自动装箱到该对象数组的 Object 中?
protected String stringId(Object... things) {
final StringBuilder sb = new StringBuilder();
for (Object thing : things) {
if(sb.length() > 0) {
sb.append('-');
}
sb.append(String.valueOf(thing));
}
return sb.toString();
}
最佳答案
保存变量参数的临时数组是在调用站点创建的,每个调用站点将单独优化,并且可能会删除或不删除对象分配。这需要将您的方法内联到调用者,以允许优化器证明该数组纯粹是临时的,即不会转义。
但是,无论这种情况发生与否,都无关紧要。在未优化的执行场景中,您的基本足迹至少包含五个对象实例、可变参数数组、StringBuilder
及其支持数组以及结果 String
及其结果支持阵列。然后,对于每个还不是 String
或特殊处理值(如 null
或 boolean
)的参数,调用 String .valueOf(thing)
可能会在附加到 StringBuilder
之前返回一个带有新支持数组的新 String
实例。
此外,StringBuilder
的后备数组以 16 个字符的默认容量开始,每次容量耗尽时都会被更大的数组替换。
如上所述,这就是未优化的执行场景,优化器会在这些操作中找到很多优化机会,这些操作比为 varargs 参数创建的唯一数组实例具有更大的影响。这也适用于需要自动装箱的值。这种自动装箱也发生在调用者处,并且受到专门针对自动装箱的优化。对于某些值,甚至必须在每次装箱时评估相同的对象。
请注意,经常被忽视的实际费用是在不同的地方。例如,将数值转换为十进制表示形式比将这些值包装成轻量级的整数要昂贵得多。 Double
对象。
关于java - JAVA足够智能来优化vararg数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46277370/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!