【问题标题】:Can Java reuse non-disposed system GUI resources?Java 可以重用未释放的系统 GUI 资源吗?
【发布时间】:2011-01-11 02:18:27
【问题描述】:
我试图更多地了解 AWT/Swing 的 Window 类的 dispose() 函数及其作用。想象以下一系列事件:
- Window 衍生 X 的实例 A 在超出范围后被垃圾回收。在垃圾回收之前不调用 Dispose。
- 创建并显示了 X、B 的新实例。
B 是否使用 A 被 GC 后留下的未处置资源?
另外,对于一个Window导数Z,如果Z的实例很多,JRE能否在它们之间复用窗口资源?
【问题讨论】:
标签:
java
user-interface
memory-management
garbage-collection
dispose
【解决方案1】:
这更多来自对内存工作原理的一般理解,但是:
如果资源没有被处理掉,你就不能使用它们,因为它们还在被占用。当资源没有被处理/垃圾收集/释放时,它们不可用,因为还有其他东西用完了该内存。但是,一旦超出范围,它实际上应该被处理掉。如果不是,那么在 JVM 中会导致 memory leak。
对于第二部分,如果您的意思是项目之间的内存块,这完全取决于是否有足够的空间。同样,我不是 100% 了解 JVM 如何管理内存,但如果您需要两块内存并且在 Z1 和 Z2 之间只有一个块,那么不,它需要一个连续的内存空间。