Kin*_*uoc 37 java memory-management
我知道Java有自己的垃圾收集,但有时我想手动删除垃圾.有没有办法做这样的工作?考虑到我有很长或很长的function声明很多变量,在使用函数结束时使用而不是自动收集后立即删除未使用的内存是个好主意吗?如果我手动删除垃圾,是否会影响我的申请速度?谢谢你的帮助!
Tud*_*dor 37
在java中没有直接和直接的释放内存的方法.您可能会试图说服垃圾收集器使用众所周知的东西拿走一些对象:
Object obj = new Object();
// use obj
obj = null;
System.gc();
Run Code Online (Sandbox Code Playgroud)
但是不能保证这会立即释放内存.
虽然这适用于堆内存,但只有在函数返回时才能释放堆栈分配的项.
Sea*_*wen 15
为什么要"手动"删除垃圾?如果是因为你的内存不足,请记住Java会在实际投掷之前运行垃圾收集OutOfMemoryError.如果你真的没有内存,那么即使你手动删除也没有垃圾.
声明变量不会在堆上分配内存.用对象制作对象new.JVM可以对甚至没有超出范围但在方法结束之前不再使用的GC对象引用进行转义分析.
如果您的意思是主动要在系统资源不重要的某个时刻释放内存,那么使用更好的JVM调优就像使用并行GC算法一样.
"手动"通过设置事物来收集垃圾null可能会减慢速度,只是因为你无意义地支付了无效引用的成本,或者调用了GC的次数超过了所需的时间.