Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java字符串创建';最便宜的&x27;方式_Java_Android_String_Memory - Fatal编程技术网

Android Java字符串创建';最便宜的&x27;方式

Android Java字符串创建';最便宜的&x27;方式,java,android,string,memory,Java,Android,String,Memory,我有一个runnable,它在屏幕上不断更新字符串值,一个列表中可能有10个项目,所有这些项目每秒都在更新它们的值。它基本上是一个同时运行的秒表列表。下面的方法有三种不同的方法来生成字符串: private void setTime() { long now = System.currentTimeMillis() / 1000L; long difference = now - startTime; // METHOD 1 String conc = Str

我有一个runnable,它在屏幕上不断更新字符串值,一个列表中可能有10个项目,所有这些项目每秒都在更新它们的值。它基本上是一个同时运行的秒表列表。下面的方法有三种不同的方法来生成字符串:

private void setTime() {

    long now = System.currentTimeMillis() / 1000L;
    long difference = now - startTime;

    // METHOD 1
    String conc = String.format("%02d:%02d:%02d", difference / 3600, (difference % 3600) / 60, difference % 60);

    // METHOD 2 (not finished)
    StringBuilder sb = new StringBuilder(8);
    sb.append(difference/3600).append((difference % 3600 /60)).append(difference % 60);

    // METHOD 3
    String timeAsText = new SimpleDateFormat("HH:mm:ss")
                .format(new Date(difference * 1000));        
}
所有这些方法都有效,但在观察内存的同时,对每种方法执行相同的测试,并将其保留10分钟后,每种方法的分配继续增加

方法1-分配的内存增加了大约5MB-6MB

方法2-分配的内存增加了大约3MB

方法3-分配的内存增加了约6MB

仅仅10分钟后,这并不理想,我已经尝试跟踪内存分配,问题肯定是创建字符串


我该怎么做才好?我可以使用什么方法将内存分配保持在最小?更好的是,我能做些什么来阻止记忆不断上升?(顺便说一句,这肯定是一个新问题,取出它可以阻止泄漏)

String
值不断变化时,会重新开始使用
StringBuilder
,因为它是可变的。(即,当您更改值时,它不会创建新对象)因此您的方法2是好的。20分钟后会发生什么?内存消耗增加了两倍?@PragnaniKinnera,这对他没有帮助。我打赌他想在某个时候将其写入TextView,因此他需要构建字符串。在这一点上,它是不可变的。如果你说的是不断追加数据,你的建议就更正确了。字符串是不可变的,所以我投票支持
StringBuilder
解决方案。@Foxinsocks它将是双重肯定。字符串生成器选项的增长速度约为每分钟0.3MB。