我正在准备OCPJP,我被困在下面的模拟考试题中:
给定:
3. interface Animal { void makeNoise(); }
4. class Horse implements Animal {
5. Long weight = 1200L;
6. public void makeNoise() { System.out.println("whinny"); }
7. }
8. public class Icelandic extends Horse {
9. public void makeNoise() { System.out.println("vinny"); }
10. public static void main(String[] args) {
11. Icelandic i1 = new Icelandic();
12. Icelandic i2 = new Icelandic();
12. Icelandic i3 = new Icelandic();
13. i3 = i1; i1 = i2; i2 = null; i3 = i1;
14. }
15. }
当到达第14行时,有多少对象符合垃圾回收器的条件?
A.0
B.1
C.2
D.3
E.4
F.6
他们的正确答案是E,即四个物体,但我不确定为什么。在我看来,i2及其重量将符合垃圾收集的条件。也许我遗漏了什么,请告诉我。
系统中将有4个对象,3个Icelandic
实例和1个Long
实例。
当您将常量对象分配给某个变量时,编译器使用一种私有静态最终Long 1200=Long.valueOf(1200L);
对象,该对象由所有权重
实例共享。
原语类型包装是不可变的,所以进行这种优化是安全的。
编辑:可能我错了,因为如果我们在这里多次引用同一个常数,这种方法会起作用,但事实并非如此
让我们把创建的第一个冰岛对象称为“A”,第二个称为“B”,第三个称为“C”。在第12行之后,它们分别被i1、i2和i3引用。
现在,我们做到了:
i3 = i1; // object "C" is no longer referenced, object "A" is now referenced by i1 and i3
i1 = i2; // object "A" is just referenced by i3, object "B" is referenced by i1 and i2
i2 = null; // object "B" is just referenced by i1 now
i3 = i1; // object "B" is referenced by i1 and i3, object "A" is no longer referenced
因此,对象“A”和“C”不再被引用,它们及其“权重”符合垃圾回收机制,因此总共有四个对象。
让我们在第11行IceA
、第12行ICE
上调用Icelandic()
,以此类推。
创造之后
i1 = IceA
i2 = IceB
i3 = IceC
在i3=i1之后
i1 = IceA
i2 = IceB
i3 = IceA
在
i1=i2之后
i1 = IceB
i2 = IceB
i3 = IceA
在
i2=null之后
i1 = IceB
i2 = null
i3 = IceA
在
i3=i1之后
i1 = IceB
i2 = null
i3 = IceB
因此,只有在第12行创建的
Icelandic()。现在,每个
Icelandic()
都有一个Long weight
,因此IceA
和IceC
现在都没有引用,这意味着GC可以使用4个对象(IceA
,IceA.weight
,IceC.weight
)。
args
仍然是args
,在这个问题中,它们不算超出范围
Long weight
不是静态声明的,因此类的每个实例都有一个weight
对象
本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄
Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner
有人能给我解释一下原因吗?
JavaScript 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。 而在C 和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。在编写JavaScript 程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。这种垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其
问题:那么扫一扫实际上是什么意思?它是实际的垃圾回收(回收无法访问的对象并释放内存?)?还是意味着什么不同? 如果是这样,如果我们省略了扫描阶段,我们会遇到什么样的麻烦?
我知道对象存储在堆内存中。每个应用程序都有自己的堆内存,这是真的吗? 调用是否会降低应用程序的性能并降低应用程序的速度?或者,每当JVM完成垃圾收集时,它会降低应用程序的性能,并会使应用程序工作缓慢? 在哪些情况下进行部分垃圾回收,何时进行主要垃圾回收?