【发布时间】:2011-03-09 22:15:52
【问题描述】:
我一直在编写一个小型 Java 应用程序(我的第一个!),目前它只做一些事情。目前,它运行 Main 类,它启动一个 gui 类(我编写的一个扩展 JFrame 的类,它只包含一个 JTextArea),一个通过大约 40kb 的 BufferedInputStream 加载本地文件的类,以及从一个加载条目的类Java 属性文件。
一切都很好,但是,我正在查看 Windows 任务管理器,我注意到一些让我感到奇怪的东西。当我启动应用程序时,当它加载本地文件并从中提取一些值以显示在 JTextArea 中时,RAM 使用量跃升至大约 40MB,这对我来说似乎很正常,因为 JVM、Java 基类等。在这个但是,当应用程序完成加载文件时,它只是处于空闲状态,因为我目前没有让它做任何其他事情。当它处于空闲状态时,只要窗口处于活动状态,应用程序的内存使用量就会开始以每秒 10-20kb 的速度攀升。这让我觉得很奇怪。如果我单击另一个程序使该程序成为非活动窗口,内存仍然会增加,但速度要慢得多(大约每 3-5 秒 10kb)。
我还没有测试过它会上升多远,但这让我觉得这是非常奇怪的行为。这是正常的 Java 行为吗?我想我的代码可能会泄漏内存,但我不确定如何。我确实确保关闭了我正在使用的 BufferedInputStream,但我看不出还有什么会导致这种情况。
如果我的解释没有意义,我很抱歉,但我希望任何人有任何见解和/或指点。
更新:
根据建议,我基本上将我的应用程序剥离到 Main 类,它只是调用 gui 类。 gui 类仅扩展 JFrame 并设置窗口大小、关闭操作和可见属性。通过这些更改,内存仍以 10-20kb 的速度增长,但速度较慢。这与我收到的其他建议一起使我相信这只是 Java。我会继续玩它,如果我发现其他有趣的东西,我会告诉大家。
【问题讨论】:
-
恭喜你的第一个应用程序!!!也许你可以发布一些代码?没有代码,我们只是猜测。也只需继续监控它,看看它是否真的一直在上升,或者它是否只是在某个时候停止。发布你的结果。
-
@Romain,谢谢!我考虑过发布我的代码,但老实说,我更感兴趣的是看看这是否是某种正常的 Java 行为(我不这么认为,但一切皆有可能!)。如果几天后我无法弄清楚原因,我将进行更多调查,然后发布代码。谢谢!
-
#masternosaj 当内部刷新到屏幕并完成垃圾收集时,内存会有一些波动是正常的。内存不断增长是不正常的。如果您是 Java 初学者,我看到有人要求对本网站上的代码部分进行代码审查。
-
@Romain,现在这让我感觉好多了,这很有意义,而且屏幕刷新等等。感谢您的洞察力!
标签: java memory memory-leaks