2009-11-10 33 views
-3

Windows Server 2008.如何快速使用RAM以便在我的應用程序中引發GC。如果有一種方法可以在不需要Visual Studio或安裝語言運行庫的情況下執行,那就很好。如何快速使用RAM以測試垃圾收集?

編輯:我不想寫一個應用程序,然後將其複製到服務器。我正在尋找一種快速完成此任務的方法,無需編寫需要IDE或安裝運行時/編譯器的應用程序。 也許是一個PowerShell或批處理腳本? ...

+2

我很好奇你爲什麼需要或想要這樣做。在收集垃圾的語言中,您應該相信垃圾收集器可以正確執行它。 – 2009-11-10 18:54:03

+0

當我手動調用GC時,我有一個內存泄漏消失: -/ – 2009-11-10 18:59:03

+0

@Mr Flibble:你使用什麼語言/運行時? – 2009-11-10 19:01:05

回答

3

我不認爲在你的進程之外使用RAM會引發GC。

如果我正確理解你的問題,你有一個程序Foo.exe是用一些未知的語言編寫的,運行在一些未知的運行時(你是不是因爲某種原因發佈了細節,或者你只是不知道?),並且您想試圖讓該程序的運行時觸發垃圾回收。但是,您想通過使用foo.exe的以外的RAM 來完成此操作。

您可以通過創建一個簡單的批處理文件來創建一個簡單的批處理文件,該文件只需啓動一百份IE或Word或任何您想要的程序。但是,我認爲這不會做你想做的事情。如果您的進程已經分配了一定數量的內存,則不一定會因爲其他進程正在啓動而提供內存或觸發GC。它可能會切換到磁盤,或者可能會強制其他程序切換到磁盤。但並不是所有的垃圾收集器都是一樣的,所以如果沒有更多的細節我們就無法幫助。我非常肯定,一些虛擬機在分配完成後從不放棄內存,即使在GC之後。

+0

謝謝彼得。所以外部的內存不足(外部到我的應用程序)不會導致垃圾收集。我的錯。 FWIW,我在.NET(ASP.NET MVC應用程序)的.NET運行時。我有一個LINQ2SQL數據上下文,它是在每個Web請求的基礎上使用Windsor IoC容器實例化的。出於某種原因,LINQ2SQL datacontext自然不會自動調用GC,並在我的應用程序中導致OutOfMemory異常。如果我在完成datacontext時手動調用GC,則內存泄漏將消失。 – 2009-11-10 19:24:39

+0

@Mr。 Flibble:'DataContext'實現'IDisposable'。你是否正確處理了它(例如,使用''block')? – 2009-11-10 19:28:39

+0

丹尼爾,它不是在'使用'塊,但我已經嘗試調用'.Dispose',但它沒有效果。 調用GC確實沒有調用'.Dispose' – 2009-11-10 19:31:49

-1

您可以在虛擬機內運行程序,如Virtual Box,您可以在其中指定客戶機操作系統的內存限制。

我很難想象這將是必要的情況。你能提供關於這個問題的更多信息嗎?

-1

如果您使用java,則可以使用Xmx指定最大內存量。搜索JVM內存設置