我知道Java有自己的垃圾回收,但有时我想手动删除垃圾。有没有办法做这样的工作?考虑到我有很长或很长的function
其中声明了许多变量,这是一个好主意,在使用后立即删除未使用的内存,而不是在函数结束时自动收集?如果我手动删除垃圾,会影响我的应用程序的速度吗?感谢您的帮助!在java中删除未使用的变量的内存
回答
在java中没有直接和直接的方式来释放内存。您可以尝试说服垃圾收集器使用众所周知带走一些对象:
Object obj = new Object();
// use obj
obj = null;
System.gc();
,但是这将实际可用内存立即难保。
虽然这适用于堆内存,但堆栈分配的项只能在函数返回时释放。
那里**是**保证GC将尽最大努力立即做某件事。 Javadoc:“**当控制从方法调用**返回时,Java虚拟机已尽最大努力从所有被丢弃的对象中回收空间。”目前还不能确定将要清理的内容。 –
你可以拨打System.gc();
哪个可能引导垃圾收集器清理。但确定这会影响你的应用程序的性能。一般来说,尝试在这里“优化”任何东西都是没有意义的。
你可以给变量赋值null,验证没有任何对这些对象的引用并调用System.gc(),但这只是JVM调用GC的建议,但不能保证。垃圾收集会减慢应用程序的速度(停止世界GC)。
手动执行此操作并不值得,因为垃圾回收器通常会做得更好,而且自己做这件事不太可能会在应用程序中产生明显的差异。
如果您必须,您可以将变量引用设置为null,并调用System.gc()
,这将手动调用垃圾回收器。
为什么要“手动”删除垃圾?如果是因为内存不足,请回想一下,在实际抛出OutOfMemoryError
之前,Java将运行垃圾回收。如果你真的内存不足,那么即使你手动删除也没有垃圾。
声明一个变量不会在堆上分配内存。用new
做一个对象呢。 JVM可以对甚至没有超出范围但在方法结束之前不再使用的GC对象引用进行转义分析。
如果您的意思是您主动想要在系统资源不重要的某个点释放内存,那么请使用更好的JVM调优,如使用并行GC算法。
如果仅仅因为您无谓地支付无效引用的成本,或者调用GC的次数超过所需的次数,通过将事物设置为null
来“手动”垃圾收集可能会降低速度。
一个非常普遍的建议是使用System.gc()
其中 JVM可能会选择忽略。您也可以使用范围,例如:
import java.io.*;
public class AutoVariableTest
{
public static void main(String[] args) throws Exception
{
String fileName = "test.txt";
{// This is local block just to keep auto variable in check
File file = new File(fileName); // file is not visible outside the scope and is available for garbage collection
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(file));
// ...
}finally{
if(br != null)
br.close();
}
}// local block end
}
}
如果您尝试管理内存,Java并不适用!或者如果您有很多时间,则在JVM中编写自己的垃圾收集机制
如果您打算减少某个点后使用的内存量,最好使用数组作为变量,以便您可以设置一旦数组不再有必要时,该数组为null。这样,垃圾回收器清理所有数据的时间就会少很多。
- 1. AS3删除未使用的变量
- 2. ARMCC删除未使用的变量
- 3. 如何删除未使用的共享内存和信号量?
- 4. 在变量内删除变量
- 5. 在eclipse中删除未使用的导入和变量保存动作
- 6. Python聊天:删除变量以清除函数中的内存?
- 7. 删除未使用的变量和ggplot中的问题R
- 8. Java的GC内存中删除
- 9. 从jQuery中删除未使用的变量
- 10. 如何删除WebStorm中所有未使用的变量?
- 11. 从HashMaps中删除未使用的已分配内存
- 12. 在SAS中保存/删除变量
- 13. Java中内存中未初始化的静态变量
- 14. Java - 在调用后未被擦除的方法中的变量
- 15. 如何删除存储在向量中的std :: unique_ptr的内存
- 16. 本地变量在超出范围时删除另一个变量的内存
- 17. 删除使用变量名
- 18. 如何用xCode快速删除所有未使用的变量?
- 19. 使用JavaScript onclick删除元素并在SQL中保存变量
- 20. Java:变量未使用
- 21. 在Fortran代码中删除未使用的局部变量的工具
- 22. 删除awk中的变量
- 23. 自动删除未使用的变量声明 - Android Studio/Inteiij
- 24. 如何删除未使用的变量和函数
- 25. 删除未使用的变量会导致代码崩溃
- 26. 删除C中的内存
- 27. 未被访问的变量的Java对象内存分配
- 28. 使用impi库删除未分配内存时的问题
- 29. Java - 从内存中删除线程
- 30. 在css中删除未使用的类
这是一个好主意,使用后将变量设置为null。 HotSpot也会为你做到这一点,但不能100%保证。 –