首页 > 试题广场 >

关于JAVA的垃圾回收机制,下面哪些结论是正确?

[单选题]
关于JAVA的垃圾回收机制,下面哪些结论是正确?
  • 程序可以任意指定释放内存的时间
  • JAVA程序不能依赖于垃圾回收的时间或者顺序
  • 程序可明确地标识某个局部变量的引用不再被使用
  • 程序可以显式地立即释放对象占有的内存
B.
Java提供了垃圾回收机制来帮助我们不定时的回收那些已经不再使用的对象。当JVM启动时,除了启动我们的主线程外,还会启动垃圾回收线程,它会在JVM空闲时,自动回收我们不再使用的对象,释放内存空间。程序员不能强制执行垃圾回收,但是可以通过System.gc()来建议执行垃圾回收器,垃圾回收的时间和顺序是无法预知的。
发表于 2015-08-19 17:09:07 回复(0)
只有堆中的对象才会存在引用,栈中的局部变量是不存在引用的。不知道这样能不能解释C的错误
发表于 2016-03-11 09:15:24 回复(0)
B没看懂啥意思,c中局部变量是存储在棧中,局部方法结束后会通过finalize()函数释放,而垃圾回收器仅处理堆中不用的内存,处理时间和顺序由垃圾回收器自己决定,程序员可通过system.gc(来建议回收)
发表于 2016-09-06 09:17:36 回复(0)
c为什么不对?给局部变量赋值null?
发表于 2015-03-29 22:07:33 回复(2)
程序可明确地标识某个局部变量的引用不再被使用
局部变量设为NULL后,引用对象不再被该局部变量引用,但可能存在其他变量引用它
发表于 2020-03-11 20:58:55 回复(0)
选择B 垃圾收集发生的不可预知性:由于实现了不同垃圾回收算法和采用了不同的收集机制,所以它有可能定时发生,有可能是当出现系统空闲CPU资源时发生,也有可能和原始的垃圾收集一样,等到内存消耗出现极限时发生!
发表于 2017-04-03 18:27:10 回复(0)
C错误: gc只能释放堆上的内存,而栈上的内存,必须用finalize()释放
编辑于 2016-08-15 11:32:31 回复(0)
局部变量存放在栈中
发表于 2015-09-09 11:22:49 回复(0)
java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。
当对象的引用变量被赋值为null,可能被当成垃圾。
编辑于 2015-07-05 16:25:01 回复(5)
C项错误的原因:局部变量存放在栈上,栈上的垃圾回收,由finalize()来实现
发表于 2015-09-22 23:03:20 回复(4)
答案是B
GC是完全自动的,不能确定具体的回收时间
另外C中,局部变量是放在栈中,而GC是用于堆,两者没有关联,是这样解释么。。
发表于 2015-07-17 09:46:35 回复(2)
说说我的错误选项c吧,局部变量声明在栈中,当函数调用完毕后自动清空栈,并不是由jvm来回收的,jvm只负责回收堆中内存。
编辑于 2016-10-23 16:56:23 回复(0)
很多人选C多半是认为置为null,但是置为null不一定就不会使用了啊~那我初始化的时候还置为null呢
况且,置为null只是被认为可以当垃圾回收了。不一定会马上回收
局部变量分为引用变量和基本类型变量,基本类型的变量名称和值都是存储在栈中。引用变量只存储引用在栈中,值在堆中,题目中说的是局部变量的引用,而要释放这个需要finalize()方法,这个方法即便使用了也不是一定立刻马上执行。一般局部变量都是随着方法执行结束而释放
编辑于 2017-11-27 19:41:20 回复(0)
这道题目考察的是 Java 垃圾回收机制(Garbage Collection, GC)的相关知识。我们来逐一分析选项:

---

### 题目分析

**题目**:关于 Java 的垃圾回收机制,下面哪些结论是正确的?

#### 选项:
- **A. 程序可以任意指定释放内存的时间**
  - **错误**。Java 的垃圾回收是由 JVM 自动管理的,程序员无法精确控制垃圾回收的时间。
  
- **B. Java 程序不能依赖于垃圾回收的时间或者顺序**
  - **正确**。Java 的垃圾回收是由 JVM 自动管理的,其时间和顺序是不可预测的。程序员不应该依赖垃圾回收的时机来编写程序逻辑。

- **C. 程序可明确地标识某个局部变量的引用不再被使用**
  - **错误**。Java 中局部变量的生命周期是由其作用域决定的,程序员无法显式地标识某个局部变量的引用不再被使用。垃圾回收器会自动检测不再使用的对象。

- **D. 程序可以显式地立即释放对象占有的内存**
  - **错误**。Java 中无法显式地立即释放对象占有的内存。虽然可以通过 `System.gc()` 或 `Runtime.getRuntime().gc()` 建议 JVM 进行垃圾回收,但这并不能保证立即释放内存。

---

### 正确答案
**B. Java 程序不能依赖于垃圾回收的时间或者顺序**

---

### 补充知识
- Java 的垃圾回收机制是自动的,程序员无法精确控制垃圾回收的时机。
- 垃圾回收器会检测不再被引用的对象,并自动回收它们占用的内存。
- `System.gc()` 只是向 JVM 发出垃圾回收的建议,但 JVM 不一定会立即执行。


发表于 2025-02-21 10:28:51 回复(0)
局部变量回收-——是用finslize() 垃圾回收机制回收的是引用变量 局部变量在栈里面 而引用变量也就是对象放在堆里面,局部变量存放在栈上,栈上的垃圾回收,由finalize()来实现
编辑于 2019-10-27 22:14:00 回复(0)
C、在GC前,会触发finalize方法,必要时候需要在里面进行一些额外的资源清理或内存释放操作。想问一下,这样的操作难道不依赖于垃圾回收的时间吗?它就是依赖于GC时间前处理的,不是吗?还是说照C的说法就不能有这样的写法,不吧!

发表于 2019-10-25 22:23:14 回复(0)
可以理解为:垃圾回收跟你(程序)没关。针对堆上的内存,自动进行垃圾回收。栈上内存,随着方法的结束,而被释放。


发表于 2019-09-08 16:00:16 回复(0)
gc作用于堆,而局部变量存在栈中
发表于 2019-07-01 11:08:26 回复(0)
gc是自动的
发表于 2019-06-16 00:25:43 回复(0)

D的错误原因c我知道错的原因了D没懂



发表于 2019-05-06 22:36:07 回复(0)