2012-10-06 52 views
1

我的問題是密切相關的Java-Native-Code-Background告訴JVM多少本機內存是如何使用的

你無法從Java控制本機內存真的很好。您可能聽說過關於本機緩衝區的 ,但他們沒有告訴您的是 Java不會正確地垃圾本機緩衝區。問題是Java 沒有考慮到本地緩衝區的大小,這意味着它會在某個時候釋放一個本地緩衝區,但如果你真的有很多這樣的緩衝區,那麼它可能不會在以前你用完了內存。 這意味着所有數據都必須存儲在Java對象中。

因此,是否有可能以某種方式告訴或註冊用於告知JVM它應該運行GC的本地內存量? 如果我的理解正確,那麼Dalvik does this,但在所有JVM上使用可靠的方法很不錯。

謝謝!

+0

不,你只有-X參數在你的控制下。您無法在Sun JVM中運行GC。 – duffymo

回答

2

你不能告訴JVM使用了多少本機內存,JVM根本沒有任何接口。但是,如果你只是不想耗盡內存,因爲JVM沒有注意到你有多少用,我能想到的方法有兩種:

  1. java.lang.System.gc()運行GC每當你認爲JVM應該做的。 Smarter people than me are suggesting it.不要忘了GC會對JVM的性能產生影響。
  2. 爲您的應用程序的總使用量分配足夠大的直接緩衝區,使其持久化並對其執行自己的內存管理。 This is suggested by the NIO doc itself,理由是直接緩衝區的de/alloc成本較高。重新使用它。在大緩衝區的偏移處讀寫部分ByteBuffers。
相關問題