我已经用Java编写了一个程序,用于检测它运行的计算机何时闲置。当空闲时间被重置(换句话说,使用鼠标或键盘)时,程序锁定计算机。该程序设计用于在计算机启动时运行,并在打开机器时继续运行。我的问题是,程序运行时间越长,程序占用的空间越多。我没有看到任何理由为什么它应该;没有什么像一个ArrayList被不断添加的。该程序在内存中以每小时10兆字节“扩展”。有没有我应该做的垃圾收集?Java程序越来越大
0
A
回答
0
尝试将堆大小设置为较低的值......然后垃圾收集器应该先踢入。不时手动拨打System.gc()
也应解决您的问题。如果一段时间后这会导致OutOfMemory异常和/或内存不断增加,那么您确实在某处存在内存泄漏。
1
这听起来不像你甚至有问题。 10 MB真的不是那么大。这可能是垃圾收集器根本没有“决定”在一段时间内运行。您可以尝试通过调用System.gc()直接调用GC,但是实际上,除非内存不足或出现性能问题,否则我不会太担心。
0
只要程序使用new
运算符,运行时就会分配新内存,直到垃圾回收器决定是否回收可用空间时才会释放新内存。所以,即使你没有通过添加一个永远不会被清除的集合来“泄漏”内存,你仍然在使用内存,你的使用将随着时间的推移而增长。
考虑消除对new
的调用(例如,通过重新使用现有对象)或调整JVM上的堆大小设置,以便在需要消耗内存时更频繁地启动垃圾回收器。
相关问题
- 1. Java越来越有序的子序列
- 2. java越来越硬盘序列
- 3. ActiveMQ ActiveMQ.Advisory.TempQueue越来越大
- 4. 堆内存越来越大
- 5. 流星:index.html越来越大
- 6. 的Java越来越元素
- 7. 越来越java包名
- 8. Java数组越来越多
- 9. 越来越构建一个FORTRAN程序
- 10. BerkeleyDB越来越胖,越来越慢
- 11. Python - main.py越来越大,需要封装处理程序
- 12. 我的Java程序是越来越无法更新的Neo4j DB
- 13. 越来越
- 14. 越来越CursorIndexOutOfBoundsException
- 15. 越来越hibernate.QueryException,
- 16. 越来越
- 17. 越来越java.lang.NoSuchMethodError
- 18. 越来越
- 19. 越来越java.lang.classCastException:android.os.Bundle
- 20. 越来越以 '/'
- 21. 越来越java.lang.ArrayIndexOutOfBoundsException
- 22. 越来越org.springframework.web.bind.MissingServletRequestParameterException
- 23. 越来越
- 24. 我越来越
- 25. 越来越元
- 26. 防止ServiceReferences.ClientConfig变得越来越大
- 27. 为什么oracle临时越来越大?
- 28. SQL事务日志越来越大
- 29. C++越来越TwoRandomNumbers,最小和最大
- 30. 加入大表越来越慢
您是否尝试过使用探查器来确定您的程序中哪些对象正在增长? JVisualVM是免费的,并且附带JDK – 2015-03-31 15:44:29
我没有;我会给你一个镜头... – KnightOfNi 2015-03-31 15:46:06
我想你是依靠一些本地电话。你确定所有的资源在不使用时都被释放了吗?你确定你没有释放它,而是一遍又一遍地调用同一个资源? – ortis 2015-03-31 15:50:05