首页 > 试题广场 >

以下哪项陈述是正确的?

[单选题]
以下哪项陈述是正确的?
  • 垃圾回收线程的优先级很高,以保证不再使用的内存将被及时回收
  • 垃圾收集允许程序开发者明确指定释放哪一个对象
  • 垃圾回收机制保证了JAVA程序不会出现内存溢出
  • 进入”Dead”状态的线程将被垃圾回收器回收
  • 以上都不对
推荐
答案:E
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收

编辑于 2015-01-29 11:31:32 回复(20)
深入理解Java虚拟机 书籍中p66,真正宣布一个对象死亡,至少需要经历2次标记过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法)。如果对象没有覆盖该方法,就面临死亡,所以说这个方法是对象逃脱死亡命运的最后一次机会。 大家顶我上去,让更多的人看到。看前面没人讲的很详细,如果想深究,去看书。
发表于 2017-03-15 23:43:55 回复(10)
E.
当程序运行时,至少会有两个线程开启启动,一个是我们的主线程,一个时垃圾回收线程,垃圾回收线程的priority(优先级)较低
垃圾回收器会对我们使用的对象进行监视,当一个对象长时间不使用时,垃圾回收器会在空闲的时候(不定时)对对象进行回收,释放内存空间,程序员是不可以显示的调用垃圾回收器回收内存的,但是可以使用System.gc()方法建议垃圾回收器进行回收,但是垃圾回收器不一定会执行。
Java的垃圾回收机制可以有效的防止内存溢出问题,但是它并不能完全保证不会出现内存溢出。例如当程序出现严重的问题时,也可能出现内存溢出问题。

发表于 2015-08-21 15:19:20 回复(7)
答案:E
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收
发表于 2015-10-29 21:40:45 回复(1)
adc错误显而易见
对于d:
进入dead的线程最后会调用finilized方法,有可能是dead线程重新复活。所以d错。
发表于 2015-06-20 18:20:39 回复(1)
答案D
A :java中的垃圾回收线程基本是所有线程中优先级最低的
B: 这个由JVM决定
C:垃圾回收与内存溢出是不同的概念,垃圾回收释放不用的内存,不能保证内存不会溢出
发表于 2015-01-03 22:02:07 回复(0)
首先,垃圾回收线程在jvm中的优先级是很低的。其次,程序员并不能通过程序具体告诉垃圾收集器回收一个具体的对象。垃圾收集器会监视对象,当这个对象变为不可以对象时,回收它,程序可以通过system.gc()建议系统对这个对象进行回收,但是系统并不一定会执行。 虚拟机在执行程序时内存会分为5部分,堆,方法区,程序计数器,虚拟机栈,本地方法栈,只有程序技术不会抛出OutOfMermoryError(内存溢出)异常,每个区域都有各自产生异常的情况,具体参照《深入了解java虚拟机》。但并不是无论如何都不会产生异常,程序bug太多照样会产生内存溢出异常。 java 虚拟机规定回收的对象要通过两次标记之后才对对象进行回收。第一是判断对象到GCRoots有没有引用链,如果没有,进行第一次标记。第二是判断这个对象有没有必要执行finliza()方法,如果有必要执行,系统会创建一个队列存放这些对象,然后对这些对象进行第二次标记,对象通过自救可以避免回收。
发表于 2017-05-24 11:29:22 回复(0)
dead线程怎么可以恢复?求解 

发表于 2017-02-19 18:00:07 回复(5)
死亡态:当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

编辑于 2015-08-30 17:22:54 回复(0)
E,线程进入dead状态,不代表它不可达,有可能只是run或者call运行完成了,但是还有别的对象持有 它,而回收线程对象必须不可达才能回收,
发表于 2020-10-02 00:28:49 回复(1)
B答案,jvm执行gc,实际上是执行的,对象finalize方法, 当没有引用的对象会进入垃圾收集器,等待垃圾收集器执行他们的finalize方法。 你无法指定jvm回收垃圾器回收指定对象 D 答案,线程和对象是两个概念,线程进入dead状态,但线程对象可能还在被引用,这时候线程死对象活!
编辑于 2022-01-11 08:52:42 回复(1)
D
发表于 2015-01-03 21:14:45 回复(0)
D选项,线程状态和对象状态是两个概念,线程进入dead状态,但线程对象可能还在被引用,处于存活状态,垃圾回收器不会回收线程对象。
其他选项,高赞回答已经说的很详细啦!
发表于 2022-08-05 16:23:49 回复(0)
正确答案:E
A:垃圾回收线程是守护线程。守护线程优先级比较低。在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
    有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。
B:参考A的解释
C:垃圾回收机制与内存溢出没太大的关系,他是一种防止内存泄露的手段,但是也有内存泄露的可能(如强引用对象永远不被回收)。  
        而内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out ofmemory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收。
发表于 2022-02-03 12:04:29 回复(0)
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收
故:选择都不对
发表于 2021-09-20 16:03:18 回复(0)
A. 垃圾回收线程的优先级很低,几乎是所有线程优先级中最低的
B. 不允许指定
C.  不能保证
D.  进入dead的线程不能复活,但是不一定会被垃圾回收器回收。
发表于 2017-12-05 18:54:48 回复(0)
Java中线程的优先级分1-10,其中1为最低优先级,10为最高优先级,如果不设置的话,默认线程的优先级为5. 垃圾回收线程几乎是所有线程中优先级最低的。何时启动何时终止难以控制。
调用 System.gc()方法不能保证 JVM 立即 进行垃圾收集,而 只能 是建议,因为垃圾收集线程的优先级很低(通常是最低的)。
有一个对象死亡的例外,java.lang.Thread类型的对象即使没有引用,只要线程还在运行,就不会被回收。
垃圾回收器可以有效的防止内存溢出问题,但是他并不能保证不会发生内存溢出。当程序出现严重的问题时,还是可以
发表于 2017-04-01 21:01:29 回复(0)
谁能解释下为啥进入Dead的线程还会恢复 ?,查了下finalize不是说的是当对象即将被回收的时候,调用的嘛  这个也同样使用于Thread?感觉怪怪的。
发表于 2016-09-08 15:11:26 回复(0)
在深入理解Java虚拟机 一书中有相关描述。在可达性分析之后,不可达的对象未必就是要被回收。首先判断是否有必要执行finalize方法,如果没有覆盖或者已经执行过该方法,那么就认为没有必要执行。如果认为有必要执行,把对象加入到F-Queue队列中,之后JVM会自动创建一个低调度优先级的线程来执行队列中的对象的finalize方法,如果在这个过程中,对象依然没有和GC-Roots建立起引用连接,那么就会被回收。否则不会被回收,得以“起死回生”
发表于 2021-07-27 14:12:58 回复(0)
1.垃圾回收线程的优先级很高,以保证不再使用的内存将被及时回收。
(垃圾回收再jvm中优先级相当相当低。当程序运行时,至少会有两个线程开启启动,一个是我们的主线程,一个时垃圾回收线程,垃圾回收线程的priority(优先级)较低 )
2.垃圾回收允许程序开发者明确指定释放哪一个元素。
(程序开发者只能建议jvm进行回收,但何时回收,回收哪些程序员不能控制。垃圾回收器会对我们使用的对象进行监视,当一个对象长时间不使用时,垃圾回收器会在空闲的时候(不定时)对对象进行回收,释放内存空间,程序员是不可以显示的调用垃圾回收器回收内存的,但是可以使用System.gc()方法建议垃圾回收器进行回收,但是垃圾回收器不一定会执行。 )
3.垃圾回收机制保证了Java程序不再出现内存溢出。
(Java的垃圾回收机制可以有效的防止内存溢出问题,但是它并不能完全保证不会出现内存溢出。例如当程序出现严重的问题时,也可能出现内存溢出问题。)
4.进入dead状态的线程将被垃圾回收器回收。
(进入dead的线程可以恢复,所以gc不会回收)
————————————————
版权声明:本文为CSDN博主「CANDH」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_48307978/article/details/112393123
发表于 2021-05-31 16:45:09 回复(0)
进入DEAD的线程,它还可以恢复,GC不会回收
发表于 2021-04-29 10:01:53 回复(0)