gpt4 book ai didi

java - 本例中有多少对象符合垃圾收集器的条件

转载 作者:行者123 更新时间:2023-11-30 10:41:57 26 4
gpt4 key购买 nike

public class Currency {
String name = new String();
static Integer value = new Integer();
static void getCurrency(Integer v) {
Currency c = new Currency();
c.value = v;
}
public static void m() {
Currency.getCurrency(50);
Currency.getCurrency(100);
}
public static void main(String[] argv) {
Currency.m();
}
}

m() 退出时,我统计了 5 个符合垃圾收集器条件的元素。练习说 6 是正确答案。你能帮帮我吗?

最佳答案

getCurrency() 的两次调用将总共创建 两个 Currency 对象。每次通话都需要:

  • 一个 Integer 对象作为参数,稍后分配给 value
  • Currency 对象
  • 一个name字符串对象(不是static,即每个Currency对象都有一个)

3 × 2 = 6

更新:

最大的问题似乎是是否会为每次调用Currency 构造函数创建一个新的Integer 对象。将原始 int 自动装箱为 Integer 将调用 Integer.valueOf()。和 Javadoc关于 Integer.valueOf() 有这样的说法:

Returns an Integer instance representing the specified int value. If a new Integer instance is not required, this method should generally be used in preference to the constructor Integer(int), as this method is likely to yield significantly better space and time performance by caching frequently requested values. This method will always cache values in the range -128 to 127, inclusive, and may cache other values outside of this range.

因此缓存范围为 -128 到 127 的值。但要注意的是,在您的代码中,您使用的是两个不同的值,50 和 100,因此缓存不会避免创建新的 Integer 对象 AFAIK。

关于java - 本例中有多少对象符合垃圾收集器的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38318630/

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