有時,需要繞過應用程序的堆內存限制,並使用超出允許的限制。通過java使用本機內存
我想過一個解決方案,它將包括一個緩存機制,它將字節存儲在本機內存中(而不是在堆內存中,但是非託管內存)。
當然,我會考慮系統的最大可用尺寸。
所以,瞭解一些關於direct buffers,我用它來存儲在本機內存中的字節數組:
final ByteBuffer nativeBytes=ByteBuffer.allocateDirect(bytes.length);
nativeBytes.put(bytes);
然而,這似乎是在Android上,用於該內存堆中使用而不是在本機內存中。
這是怎麼回事?從本機內存中加載數據有沒有簡單的選擇?
沒有「本土記憶」之類的東西;內存沒有理解本地字節碼和字節碼。這使你的問題非常不清楚。 – mah
有託管內存和非託管內存。託管內存的限制大約爲48MB,當你通過它時,你會得到OOM異常。非託管內存大小與設備的RAM大小有關,但您必須注意釋放它。使用NDK或OpenGL時可以使用這樣的東西。 –
我不會稱這種簡單的(因此值得作爲一個評論可能但不是答案),但從你的描述,它聽起來像你可以用本地方法創建一個類,其中這些本地方法執行malloc()和free()。如果你對DalvikVM如何管理內存的描述是正確的,那麼這應該允許你繞過DVM檢查(假設Android沒有采取主動措施來禁止這種檢查)。那麼要解決的問題就是如何從Java訪問該內存。 – mah