java - 我应该缓存 System.getProperty ("line.separator")吗?

标签 java caching optimization

考虑这样的方法:

@Override
public String toString()
{
    final StringBuilder sb = new StringBuilder();
    for (final Room room : map)
    {
        sb.append(room.toString());
        sb.append(System.getProperty("line.separator")); // THIS IS IMPORTANT
    }
    return sb.toString();
}

System.getProperty("line.separator") 可以多次调用。

我应该用 public final static String lineSeperator = System.getProperty("line.separator") 缓存这个值吗 然后只使用 lineSeperator?

或者 System.getProperty("line.separator") 和使用静态字段一样快?

最佳答案

我认为您的问题提出了错误的二分法。我既不会每次都调用 getProperty,也不会为其声明一个静态字段。我只是将它提取到 toString 中的局部变量。

@Override
public String toString()
{
    final StringBuilder sb = new StringBuilder();
    final String newline = System.getProperty("line.separator"); 
    for (final Room room : map) sb.append(room.toString()).append(newline);
    return sb.toString();
}

顺便说一句,我已经对调用进行了基准测试。代码:

public class GetProperty
{
  static char[] ary = new char[1];
  @GenerateMicroBenchmark public void everyTime() {
    for (int i = 0; i < 100_000; i++) ary[0] = System.getProperty("line.separator").charAt(0);
  }
  @GenerateMicroBenchmark public void cache() {
    final char c = System.getProperty("line.separator").charAt(0);
    for (int i = 0; i < 100_000; i++) ary[0] = (char)(c | ary[0]);
  }
}

结果:

Benchmark                     Mode Thr    Cnt  Sec         Mean   Mean error    Units
GetProperty.cache            thrpt   1      3    5       10.318        0.223 ops/msec
GetProperty.everyTime        thrpt   1      3    5        0.055        0.000 ops/msec

缓存方法的速度提高了两个数量级以上。

请注意,getProperty 调用对所有字符串构建的总体影响非常非常小。

关于java - 我应该缓存 System.getProperty ("line.separator")吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18045391/

相关文章:

javascript - 如何强制使用当前脚本?

mysql - 用join代替子查询有意义吗?

c# - super 慢的 C# 自定义控件

java - Groovy 中的闭包 - 用等效的 Java 实现

java - 如何将包含转换为 equals.ignorecase?

java - 如何使用java上传谷歌云存储中的文件

image - Flutter 图像加载和缓存

iphone - "Legality"在 UIWebView/Phonegap 中使用 web 资源和 appcache

python - 在 RK4 算法中使用 lambda 函数

java - 除了复制 JRE 文件之外,Linux 计算机中的 JRE 安装程序还设置了哪些参数?