第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java獲取可用內(nèi)存

Java獲取可用內(nèi)存

紫衣仙女 2019-11-12 14:55:42
有什么好的方法可以在運行時將剩余的內(nèi)存提供給JVM?這種情況的用例是使Web服務(wù)在接近內(nèi)存限制時通過拒絕一個新的錯誤消息“太多的人使用此,請稍后再試”,而不是由于OutOfMemory錯誤而突然死亡,從而在它們接近內(nèi)存限制時優(yōu)雅地失敗。 。注意,這與事先計算/估算每個對象的成本無關(guān)。原則上,我可以根據(jù)該估算值估算對象占用并拒絕新連接的內(nèi)存量,但這似乎有點hacky /脆弱。
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊

注意:到目前為止,所有答案,甚至是已接受的答案,似乎都在回答這個問題,說這Runtime.getRuntime().freeMemory()將為您提供可能分配的內(nèi)存量,直到發(fā)生內(nèi)存不足錯誤為止。但是:這是錯誤的。


直到出現(xiàn)內(nèi)存不足錯誤(即可能有空閑內(nèi)存)之前可以分配的大概內(nèi)存量


long presumableFreeMemory = Runtime.getRuntime().maxMemory() - allocatedMemory;

哪里


long allocatedMemory      = (Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory());

說明: 如果通過-mx參數(shù)(或-Xmx)啟動JVM,則指定可用于JVM的最大數(shù)量。Runtime.getRuntime().maxMemory()會給你這筆錢。JVM將從此系統(tǒng)內(nèi)存量中分塊分配內(nèi)存,例如64 mb的塊。在開始時,JVM只會從系統(tǒng)中分配這樣的塊,而不是全部。Runtime.getRuntime().totalMemory()給出了系統(tǒng)分配的總內(nèi)存,同時Runtime.getRuntime().freeMemory()為您提供免費的內(nèi)存中分配的內(nèi)存總量。


因此:


long definitelyFreeMemory = Runtime.getRuntime().freeMemory();

是JVM已經(jīng)保留的可用內(nèi)存,但是可能只有少量。而且您可能會得到presumableFreeMemory。當(dāng)然,即使您嘗試分配的大小小于,也可能會遇到內(nèi)存不足的異常presumableFreeMemory。如果JVM無法從系統(tǒng)中獲取下一個內(nèi)存塊,則可能會發(fā)生這種情況。但是,在大多數(shù)系統(tǒng)上,這種情況永遠(yuǎn)不會發(fā)生,并且系統(tǒng)寧愿開始交換-您希望避免這種情況。原始問題的答案:如果-mx設(shè)置為合理的值,那么它presumableFreeMemory是空閑內(nèi)存的良好指示。


查看完整回答
反對 回復(fù) 2019-11-12
  • 3 回答
  • 0 關(guān)注
  • 1317 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號