gpt4 book ai didi

java - Java 测量字符串对象大小

转载 作者:行者123 更新时间:2023-12-02 03:47:37 24 4
gpt4 key购买 nike

我创建了如下两个测试方法。

private static long usedMem = 0;
private static long newUsedMem = 0;

public static long getSize() {
System.gc();
usedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();
String s = "test";
String y = "testabcd";

System.gc();
newUsedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();

return newUsedMem - usedMem;
}

public static long getSize2() {
System.gc();
usedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();
String s = "test";
String y = s+"abcd";

System.gc();
newUsedMem = Runtime.getRuntime().totalMemory()
- Runtime.getRuntime().freeMemory();

return newUsedMem - usedMem;
}

我期望这两种方法应该提供相同的结果,因为它们测量字符串 x 和字符串 y 的大小。但是,第一个方法不断返回 0,而第二个方法不断返回 56(我在循环中运行每个方法 10 次,以确保 System.gc() 正常工作)。

还要注意的是,在第一种方法中,无论字符串 s 和 y 有多长,结果始终为 0。

有人可以向我解释一下这些差异吗?

最佳答案

第一个仅使用字符串文字,这些文字始终存在(由类加载器在类初始化期间加载),因此分配不会增加内存。

出于同样的原因,第二个分配只会增加第二个分配中的内存。

关于java - Java 测量字符串对象大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36168056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com