Chapter 5 Garbage Collectors

10 篇文章 0 订阅

垃圾回收器

5.1 垃圾回收的目的是什么?什么时候使用垃圾回收?
垃圾回收的目的是为了确定识别和丢弃掉应用不再需要的对象,为了资源能回收和再利用。

5.2 System.gc()和Runtime.gc()方法是做什么的?
这两个方法是为了垃圾回收而提示JVM。但是,立即或延迟行垃圾回收是由JVM来决定。

5.3 什么时候调用finalize()?finalization的目的是什么?
finalize()方法是只在释放对象内存前,被垃圾回收器调用。通常建议在finalize方法里释放被对象占用的资源。但是即使finalize()被保证一定会被调用,它也不是一个释放资源的好地方;当它被调用来清理所有你打开的数据库连接(DB Connections)时,系统可能已经耗尽了所有空闲的连接,然后你的app就不能继续跑了。
Finalization主要用来释放被对象占用的资源(不是指内存,而是指其他资源,比如文件(FileHandle)、端口(ports)、数据库连接(DB Connection)等)。然而,它不能真正有效地工作。

5.4 如果对象的引用设置为null,垃圾回收器会马上释放被对象占有的内存吗?
不会。这个对象会在下一个垃圾回收周期可被回收。

5.5 java堆的结构是什么样的?什么是堆中的永久代()?
jvm的堆,是为所有的类实例和分配的数组进行数据分配的地方。在jvm启动阶段创建。对象在堆中的空间是由一个自动化的内存管理系统进行回收的(即垃圾回收器)。堆区包括生存或死亡的对象。生存的对象可被应用使用,同时不会成为牢记回收器的一个对象。死亡的对象是不会被应用使用,但是还没被垃圾回收器回收。这种对象在被垃圾回收器回收之前,占用堆区的空间。
ps.虚拟机中的共划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。

5.6 串行垃圾回收器(SerialGarbageCollector)和吞吐量垃圾回收器(Throughput Garbage collector)的区别
吞吐量回收器用并行的young代垃圾回收器,同时可以使用大数据集。另一方面,串行垃圾回收器对于小应用是恰当的(在线代处理器上需要大约100MB的堆空间)。

5.7 对象在什么时候对垃圾回收器来说是合符条件的?
java对象在刚运行过的程序中没有被其他对象引用,它就属于垃圾回收的范畴。

5.8 在jvm中,垃圾回收能否发生在持久代空间?
垃圾回收可以发生在持久代空间。当持久代空间已满或者超过一个阈值的时候,可以触发完整的垃圾回收。如果你仔细观察垃圾回收器的输出,你会发现持久代的空间也被垃圾回收了。这就是为什么避免频繁完整的垃圾回收的话,必须要定义正确的持久代空间大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Error occurred during initialization of VM Multiple garbage collectors selected"错误表示在虚拟机初始化过程中选择了多个垃圾收集器。这个错误通常是由于启动Java虚拟机时的参数配置不正确导致的。在启动时,Java虚拟机会根据参数配置选择相应的垃圾收集器来进行内存管理和垃圾回收。然而,如果配置了多个垃圾收集器,就会出现这个错误。 要解决这个问题,你可以检查启动Java虚拟机的命令行参数或配置文件中的垃圾收集器相关的选项。确保只选择一个垃圾收集器来避免冲突。你可以使用"-XX:+UseSerialGC"参数来指定使用串行垃圾收集器,或使用"-XX:+UseParallelGC"参数来指定使用并行垃圾收集器。另外,你还可以使用"-XX:+UseG1GC"参数来指定使用G1垃圾收集器。 如果你使用的是Java版本较旧的话,可能没有G1垃圾收集器可用。在这种情况下,你可以尝试升级到更新的版本来获得更好的垃圾收集器支持。 综上所述,要解决"Error occurred during initialization of VM Multiple garbage collectors selected"错误,你需要检查并确保只选择一个有效的垃圾收集器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jvm gc日志说明](https://blog.csdn.net/weixin_43931625/article/details/105031002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [idea 启动项目时报错,Error occurred during initialization of VM。分配内存时出现内存不足问题解决](https://blog.csdn.net/q1779020410/article/details/104741611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值