Java垃圾回收器 原理 优点

关于Java垃圾回收器的一些问题的整理:

1、Java垃圾回收器的工作原理?

答:对于java垃圾回收器(Garbage Collector下面用GC表示)来说,当程序员新建对象的时候GC就开始监控这个对象在内存的大小、地址和使用情况。GC采用有向图的方式来记录和管理堆内存中的多有对象,通过这个方式来确定哪些对象是“可达的”,哪些对象是“不可达的”。当GC确定对象是“不可达”的,GC就将对象的内存收回,以便于分配给其他对象使用。

2、Java垃圾回收器可以马上收回内存吗?

答:可以。

3、有什么方法可以通知Java虚拟机收回内存?

答:可以手动执行System.gc(),通知java虚拟机进行垃圾回收

4、Java垃圾回收器的优点?

答:Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。


Java垃圾回收器的详细解释:

        当Java虚拟机启动并运行某个程序后,它所能使用的内存总量的上限通常是固定的。在程序刚开始运行的时候,虚拟机中的大部分内存都处于空闲可用的状态。随着程序的运行,不断有空闲的内存区域被分配给程序运行所需的对象来使用。经过一段时间后,虚拟机的内存大概就可以分为三类:当前仍处于空闲状态的内存、正在被程序所使用的内存、程序已经不再使用的内存。第二类和第三类内存的区别就在于其所对应的对象是否处于活跃状态。一个对象对于活跃状态的含义是当前程序中海存在指向该对象的引用。如果没有引用指向i个对象,那么说明该对象无法被运行的程序所使用,他所占用的内存会被当成垃圾来回收。

        随着程序的不断运行,虚拟机的内存中可用的空闲空间会越来越少,垃圾越来越多。这时就需要运行垃圾回收器来回收内存中的垃圾区域,一共下次内存分配时使用。Java虚拟机的垃圾回收器是运行在一个独立的线程中的,它会根据当前虚拟机中的内存状态来决定什么时候进行垃圾回收工作。每次垃圾回收时所处理的内存区域的范围也是不同的。垃圾回收器的具体运行时间和频率无法实现预计,取决于垃圾回收器的实现算法。不同的虚拟机实现中的垃圾回收算法也有所不同。

       垃圾回收线程和当前应用程序同时在Java虚拟机中运行,因此当前运行程序会受到垃圾回收器的影响。

        在垃圾回收器的实现方式中,通常有很多因素需要考虑和权衡,其中与当前运行程序相关的是垃圾回收器的运行方式。一般来说有并发运行和暂停执行两种。并发运行含义是指垃圾回收器与程序同时运行,而暂停执行在垃圾回收器运行时程序暂停运行。并发运行的方式对程序影响较小,但对垃圾回收器的实现要求较高,实现起来也更复杂

        虽然大多时候垃圾回收器的运行时间和频率是无法预计的,但是程序仍然可以在特定的时间建议垃圾回收器进行回收工作,通过System.gc方法可以建议垃圾回收器立即运行。不过在这种情况下,垃圾回收器也可以选择不运行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值