首页 > 试题广场 >

如何放掉一个指定占据的内存空间?

[单选题]
如何放掉一个指定占据的内存空间?()
  • 调用free()方法
  • 代用system.gc()方法
  • 赋值给该项对象的引用为null
  • 程序员无法明确强制垃圾回收器运行
推荐
D
在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。
编辑于 2015-05-05 10:12:33 回复(7)
D 其实这个gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收。但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的对策.
发表于 2015-07-12 10:26:00 回复(1)
D
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
数组和对象在没有引用变量指向它的时候,才变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。这也是 Java 比较占内存的原因。
发表于 2015-01-12 15:26:07 回复(4)
这道题有问题吧,题目说的是如何指定释放,把引用改成null,gc发现了就会释放呀。 又没说立马释放,相对来说这难道不是一种办法么?
发表于 2016-11-09 17:25:42 回复(0)
答案:C
A,java属于自动内存回收,不能调用free是否内存
B,调用gc()垃圾回收器也只能回收没有任何引用指向的对象
C,赋值该对象引用为null,没有被引用的对象会被垃圾回收器当做垃圾进行回收
D,程序员可以调用System.gc()方法运行垃圾回收器
编辑于 2015-05-05 10:12:33 回复(7)
发表于 2018-06-28 10:12:25 回复(0)
对于java占据的内存,我们能做的就只有两点。
1、告诉java虚拟机那个对象我们不再用了,引用设置为null。
2、通知java虚拟机出来回收那些不用的对象,调用system.gc()。
3、@MyGoodHelper说的很对,java内存分栈和堆,栈存的主要是基本数据类型(过了作用域就没用了),堆存的是封装类型引用(设置为null或JVM识别成武引用就会标记成没用了)。
4、java虚拟机除了被调用system.gc()会回收内存,它自己也会自动回收,但什么时候回收这是个未知数。
发表于 2016-09-28 09:02:02 回复(0)
D
内存程序员无法强制释放,在不被用的时候会被垃圾回收机制回收。这也就是为什么java比较费内存的原因
发表于 2015-04-23 14:26:24 回复(0)
D这句话毫无疑问是正确的,但是拿来回答问题并不合适.
就好比,有人问"怎么才能吃到猪肉",你回答:"反正牛身上没有".
你回答的话逻辑上是成立的,但并不是提问的人想得到的答案.
不然以此逻辑,我们也可以回答,"等着虚拟机自己GC即可,你别瞎操心".
答案C,将引用设置为null, 自然就是实际编程中应该用的做法,难道不对吗?
发表于 2019-03-26 11:03:56 回复(0)
A选项哪里错了?
发表于 2018-04-09 15:15:11 回复(1)
如果这题是在考察C++呢,那不就是A了
发表于 2017-08-25 19:58:50 回复(0)
看题目应该是选C,考知识点的话选D
发表于 2016-12-28 11:09:54 回复(0)
D
给对象引用赋值为null,并且该对象无其他引用,则gc会标记该对象为垃圾,会在后面一个不确定的时间内回收垃圾。所谓不确定是指什么时间回收,程序员无法控制。
发表于 2015-04-18 10:19:52 回复(0)
C本来就可以释放空间  赋值为null 没有变量再引用 必定可以释放
发表于 2020-02-16 16:45:00 回复(0)

Java官方为什么不改善一下,让我们调用回收就直接回收啊

发表于 2019-09-06 03:56:38 回复(0)
对于选项C , 在特殊情况下 , 即使置为null 也不一定会被回收
		// Test 是 单例模式
		Test t1 = Test.getInstance();
		System.out.println("t1的地址= "+t1);
		t1=null;    //t1置为null
		System.gc();
		int sum=0;
		for(int i=0;i<100000;i++){  //循环100000次
			sum+=i;   
		}
		System.out.println("sum= "+sum);	
		Test t2 = Test.getInstance();	
		System.out.println("t2的地址= "+t2);	//t2的地址和t1是一样的,说明t1的引用没有被回收
执行结果:
t1的地址= cn.itcast.vo.Test@3ce53108
sum= 704982704
t2的地址= cn.itcast.vo.Test@3ce53108

发表于 2019-08-15 15:05:04 回复(0)

我的理解是,把该引用指向空,那么该对象早晚会被回收,至于什么时候回收不能决定,但是我能指定该对象被回收

发表于 2019-04-15 20:37:12 回复(0)
程序员无法明确强制垃圾回收器执行, 即程序员不知道垃圾回收器啥时候对垃圾进行回收,即使调用system.gc() 也仅只是告诉垃圾回收器该回收垃圾了,但啥时候来收却是不确定的 注:free() 应该是c c++中的方法
编辑于 2019-03-11 19:27:13 回复(0)
垃圾回收机制会在过程中进行
发表于 2019-03-04 22:07:08 回复(0)
释放掉内存空间是由gc来进行完成的,但是程序员无法明确强制其运行,程序员无法通过代码来进行控制
发表于 2019-01-14 20:45:04 回复(0)
我们调用 gc函数 释放内存 只是给虚拟机 提个建议,具体什么时候执行 由虚拟机 自己决定
发表于 2018-12-23 19:23:13 回复(0)