工藝的問題:新的JVM或者每個選項卡
我有滋生「客戶」一個JTabbedPane中。每個客戶端都是使用URLClassLoader從jar文件加載的applet實例。所以基本上,每個Tab都包含一個遊戲小程序。
每次標籤產生時,任務管理器都會顯示正在使用的內存量增加。這很好。但是,當選項卡關閉時,該小程序會停止並被銷燬,但根據任務管理器的內存使用情況仍然相同。
我試着調用System.gc,這是不能保證的,而且什麼也不做!我試着將所有對小程序的引用都置零,但那也什麼都不做。
我的解決方案,如果可能的:
每個標籤都有自己的JVM /工藝運行遊戲。當一個Tab被關閉時,applet會停止,銷燬,並且進程/ JVM使用的內存將被返回給操作系統,因爲進程/ JVM已經死了?
我該怎麼做這樣的事情?是否有可能讓我的JTabbedPane中的每個Tab運行Jar或創建一個新的JVM來運行它?
如果不是,我如何清除關閉的所有選項卡的內存?
爲每個選項卡分配自己的JVM聽起來像是不必要的複雜性。也許你有內存泄漏,也許你沒有。不能保證JVM-per-tab實際上可以解決這個問題。如果首先驗證你真的有內存泄漏,然後找到它並修復它? –
JVM-per-tab對我來說聽起來很麻煩:你確定你正在解決一個實際存在的問題嗎? –
但我確實驗證過。沒有泄漏:S我關閉了所有的文件,所有的URLClassLoaders,在調用stop和destroy之前的所有內容。之後,我刪除了所有引用。然而,只要Frame在屏幕上,內存仍然在使用中:S。我使用netbeans分析器。只要我關閉一個選項卡,然後按netbeans GC按鈕,內存使用已不存在..我在我的應用程序中手動執行此操作,不起作用。 – Brandon