首页 > 试题广场 > Java中垃圾回收有什么目的?什么时候进行垃圾回收?
[问答题]
Java中垃圾回收有什么目的?什么时候进行垃圾回收?

26个回答

添加回答
目的:回收堆内存中不再使用的对象,释放资源
回收时间:当对象永久地失去引用后,系统会在合适的时候回收它所占的内存
发表于 2016-03-17 16:31:41 回复(0)
垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源
触发主GC(Garbage Collector,垃圾回收)的条件:
(1)当应用程序空闲时,即没有应用线程在运行时,GC会被调用。
(2)Java堆内存不足时,GC会被调用。
发表于 2016-07-24 16:54:01 回复(0)
垃圾回收的目的是回收堆内存中不再使用的对象所占的内存,释放资源。
回收时间:即触发GC的时间,在新生代的Eden区满了,会触发新生代GC(Mimor GC),经过多次触发新生代GC存活下来的对象就会升级到老年代,升级到老年代的对象所需的内存大于老年代剩余的内存,则会触发老年代GC(Full GC)。当程序调用System.gc()时也会触发Full GC。
编辑于 2017-01-09 16:18:59 回复(2)
仅提供一个大致的思路:
垃圾回收(gc)的目的是释放堆中不需要保存的对象,达到内存的充分利用。

1.回收哪些对象的判定
垃圾回收最简单的思路是采用引用计数的方式,即记录对象被引用的次数,直到一段时间内对象都没有被其他对象引用,此时可以确定该对象能被回收,引用计数实现简单,运行高效,但是有一个循环引用的问题,即两个本应被回收的对象因为互相引用而无法被回收,针对这个问题又有了弱引用,即把两个互相引用的一个引用计数改为弱引用,弱引用不会使次数加1,c++即是这么做的。

jvm虚拟机的使用的是根寻路算法,其大致思想是看除堆区以外的内存区域能否通过引用链找到堆中的对象,找不到就证明该对象可以被回收。
2.如何回收
jvm有两种回收方式,一种是标记完待回收的对象之后一起释放内存,这种方法的缺点是会产生较多难以重复利用的内存碎片。另一种为了避免内存碎片的出现,将内存分为两块,一块使用,一块不使用,标记完所有待回收的对象之后,将还要使用的内存复制到不使用的区域,然后对使用的整体区域进行内存回收,这种方法没有内存碎片问题,但是每次回收的复制工作很耗性能。
通过统计发现,在内存中存活越久的对象就越不容易被回收,越是新分配的内存对象就越可能会被回收。根据这个特性,把内存区域分为新生代和老年代(有的虚拟机会分为很多代),新生代容易被回收,采用复制内存再回收的方法,老年代不容易被回收,采用标记后回收和复制内存相结合的方法。
3.什么时候回收

程序员可以手动调用gc,一般是系统等到新生代的内存区占满了又需要分配内存的时候,这个时候新生代就变成了老年代,等老年代的内存占满之后开始回收老年代所占的内存区。

编辑于 2017-07-30 16:50:19 回复(0)
垃圾回收目的是回收堆中已经不再被使用的对象。垃圾回收线程是一个守护线程,优先级低,其在当前服务器空闲或堆中老年代等占用率较大时触发。
发表于 2015-11-07 19:31:59 回复(1)
目的:
识别并且丢弃应用不再使用的对象来释放和重用资源。
触发条件:(1)当应用程序空闲时,即没有应用线程在运行时,GC会被调用。
                  (2)Java堆内存不足时,GC会被调用。
发表于 2017-03-27 15:00:16 回复(0)
回收的目的:是为更好的释放和管理内存。
回收的时间:要根据垃圾回收机制的两种说法(引用计算法)(根搜索算法)但是引用计数法是不准确有漏洞的因为当两个已经死亡的对象之间有相互引用,这样就不会回收会浪费内存;所以根搜索算法更加准确因为根搜索算法是从一个GC ROOT作为起点往下搜索,搜索的路径是引用链,当一个对象无法通过引用链叨叨GC RROT时候就可以判断该对象可以回收了。
发表于 2018-08-30 11:07:09 回复(0)
垃圾回收机制的要点:
1.垃圾回收线程是一个守护线程(指在程序运行的时候在后台提供一种通用服务的线程)
2.程序员可以主动申请垃圾回收,使用代码System.gc();但是由于垃圾回收是由JVM负责的,因此请求可能被JVM可以拒绝。
3.垃圾回收器的分类:串行垃圾回收器,并行垃圾回收器,G1垃圾回收器
4.回收机制:分代复制垃圾回收,增量回收
5.作用:防止内存泄漏。
   当程序员创建对象时,GC 就开始监控这个对象的地址、大小以及使用 情况。通常,GC 采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式 确定哪些对象是"可达的",哪些对象是"不可达的"。当 GC 确定一些对象为"不可达" 时,GC 就有责任回收这些内存空间。这可以有效的防止内存溢出。
   内存溢出是指:长生命周期的对象持有短生命周期的对象的引用,这会导致短生命周期的对象的所占堆内存无法被释放。
①比如把一些不怎么使用的对象存放到全局Map中,
②或者创建了内部类对象,而其外部类即使长时间没有使用也不能释放其内存空间。
发表于 2017-10-13 10:59:51 回复(0)
目的:回收堆内存中不再使用的对象,释放资源
回收时间:当对象永久地失去引用后,系统会在合适的时候回收它所占的内存
垃圾回收的目的是回收堆中已经不在被使用的对象。垃圾回收机制是一个守护线程,优先级别低,其在当前服务器空闲或堆中老年代等占用率较大时触发。
发表于 2016-10-09 21:38:39 回复(0)
GC回收的目的在于回收那些不被引用关联的对象,释放资源
GC回收的时间:
1.程序运行System.gc();方式提醒JVM进行gc
2.Eden伊甸园内存空间紧张的时候
3.GC整体空间紧张的时候,JVM停止所有线程,执行Full GC
发表于 2018-09-17 16:09:12 回复(0)

事实上只有线程共享区才会发生GC,那么问题来了,JVM中哪些是线程共享和线程私有呢,线程共享: 方法区、堆。线程私有:本地方法栈、虚拟机栈、程序计数器。

发表于 2018-08-11 22:46:11 回复(0)

  仅提供一个大致的思路:    垃圾回收(gc)的目的是释放堆中不需要保存的对象,达到内存的充分利用。    1.回收哪些对象的判定

 垃圾回收最简单的思路是采用引用计数的方式,即记录对象被引用的次数,直到一段时间内对象都没有被其他对象引用,此时可以确定该对象能被回收,引用计数实现简单,运行高效,但是有一个循环引用的问题,即两个本应被回收的对象因为互相引用而无法被回收,针对这个问题又有了弱引用,即把两个互相引用的一个引用计数改为弱引用,弱引用不会使次数加1,c++即是这么做的。  jvm虚拟机的使用的是根寻路算法,其大致思想是看除堆区以外的内存区域能否通过引用链找到堆中的对象,找不到就证明该对象可以被回收。   2.如何回收    jvm有两种回收方式,一种是标记完待回收的对象之后一起释放内存,这种方法的缺点是会产生较多难以重复利用的内存碎片。另一种为了避免内存碎片的出现,将内存分为两块,一块使用,一块不使用,标记完所有待回收的对象之后,将还要使用的内存复制到不使用的区域,然后对使用的整体区域进行内存回收,这种方法没有内存碎片问题,但是每次回收的复制工作很耗性能。    通过统计发现,在内存中存活越久的对象就越不容易被回收,越是新分配的内存对象就越可能会被回收。根据这个特性,把内存区域分为新生代和老年代(有的虚拟机会分为很多代),新生代容易被回收,采用复制内存再回收的方法,老年代不容易被回收,采用标记后回收和复制内存相结合的方法。    3.什么时候回收    程序员可以手动调用gc,一般是系统等到新生代的内存区占满了又需要分配内存的时候,这个时候新生代就变成了老年代,等老年代的内存占满之后开始回收老年代所占的内存区。 

发表于 2018-08-06 07:44:02 回复(0)
在对象不在永久引用的时候做回收,达到释放或重利用资源的目的
发表于 2018-06-10 15:43:12 回复(0)
垃圾回收是在存在没有引用的对象与超过作用域的对象时进行的。 它的目的是识别并丢弃应用不再使用的对象来释放和重用资源
编辑于 2018-05-10 08:31:03 回复(0)
垃圾回收机制不用程序员显式的调用,是由JVM调度实现的。它是由一个低优先级的守护进程负责的;
主要采用的算法:
     1、引用计数法--即就是记录对象被引用的次数,直到一段时间内对象都没有被其他对象引用,此时确定该对象可以被回收; 
    2、跟踪法。
对象的终结finalization:
     对像使用的内存在垃圾回收之前在对象上自动执行的操作。
    它是object类的一个proteced方法。
    protected void finalize() throws Throwable
发表于 2018-04-23 00:45:12 回复(0)
作用就是回收内存中不在使用的内存,以便实现内存重用
在程序空闲的时候启动内存回收;或者程序员调用system.gc()实现垃圾回收
发表于 2018-03-14 15:12:10 回复(0)
我的java笔记写的,对象可以存活于作用域之外
发表于 2017-11-16 13:53:22 回复(0)
垃圾回收是用于将那些没有引用的内存清楚
发表于 2017-11-09 17:57:04 回复(0)
gc主要是为了让开发人员重点关注业务逻辑,jvm自己管理内存。 gc主要发生在堆上。对象不可达被判定为无用就会被gc掉。新生代的minorgc和老年代fullgc,很多时候都会触发gc,比如创建对象时新生代复制擦除算法收集垃圾腾出空间。
发表于 2017-10-11 00:27:55 回复(0)
垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。 触发主GC(Garbage Collector,垃圾回收)的条件: (1)当应用程序空闲时,即没有应用线程在运行时,GC会被调用。 (2)Java堆内存不足时,GC会被调用。
发表于 2016-11-25 09:18:28 回复(0)

扫一扫,把题目装进口袋

牛客网,程序员必备求职神器

扫描二维码,进入QQ群

扫描二维码,关注牛客网公众号