我知道对象存储在堆内存中。每个应用程序都有自己的堆内存,这是真的吗?
调用system.gc()
是否会降低应用程序的性能并降低应用程序的速度?或者,每当JVM完成垃圾收集时,它会降低应用程序的性能,并会使应用程序工作缓慢?
在哪些情况下进行部分垃圾回收,何时进行主要垃圾回收?
1)system.gc()
经常工作。当人们说不能强制垃圾收集时,意思是JVM比您更了解内存状态,如果JVM知道现在不是进行垃圾收集的好时机,您就不能强制进行垃圾收集。
2)我不相信用户生成的类会变成perm gen(尽管我可能错了),它的存在是为了存储元信息,比如类和被存储的字符串(Java 7之前)等,这些都是JVM所需要的。
3)静态变量是声明它们的类
的引用。类存储在永久生成中,所以根据它们的本质,静态变量将始终被引用,所以在perm gen中也有它们是有意义的。
4)是的。
从注释中编辑:垃圾收集永远不会在永久生成中完成。我说的对吗?
不完全是。垃圾回收很复杂!perm gen的波动性远低于堆的其他部分,并且那里的对象很有可能引用较低空间中的其他对象。我认为垃圾收集和perm gen的行为取决于您使用的Java版本,我相信较新的版本也会垃圾收集perm gen,这是有意义的,因为Java大量使用代理对象。
有人能给我解释一下原因吗?
本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄
*当我试图在JFrame中创建一个按钮时,我遇到了一个非常奇怪的java GC问题,当我单击该按钮时,它显示了一个需要处理和显示一些图像的JDialog,需要近200M内存。但问题是,当我关闭对话框并重新打开它时,有时会导致java.lang.OutofMemoryError。(不是每次) 为了解决这个问题,我简化了这个问题,做了一些实验,这使我更加困惑。 我在“实验”中使用的代码如下所示。当我单
[GC(分配失败)[defnew:10931K->472K(12288K),0.0053905秒]10931K->10712K(39616K),0.0054285秒][times:user=0.00 sys=0.00,real=0.01秒] [GC(分配失败)[defnew:10712k->472k(12288k),0.0057686秒]20952k->20952k(39616k),0.00580
每个java开发人员都知道,java对象不再使用时将被垃圾收集。我想知道JVM如何识别必须为垃圾收集选择的对象。(例如,如果我有10个对象。如果对10个对象中的2个进行垃圾收集,jvm将如何找到这两个对象)。 JVM使用标记和扫描算法(如果我是对的)。 1)例如我在下面提供字符串对象场景 //现在s1
Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner