java image 内存_Java BufferedImage内存消耗
在多線程環境中詢問運行時的可用內存量并不可靠,因為在測量之后內存可能會被另一個線程用完.此外,您正在使用maxMemory – usedMemory,這不是可用內存量,而是VM認為它最多可用的內容 – 可能是主機系統無法滿足更多內存的請求,而VM仍然認為它可以擴大堆.
它也完全有可能你的VM有108 MB免費,但一個塊沒有20MB可用.您嘗試創建的BufferedImage類型最終由int []數組支持,該數組必須作為一個重要的內存塊進行分配.這意味著如果堆上沒有可用的20MB塊,那么無論有多少總可用內存,您都會得到一個OutOfMemoryError.使用垃圾收集器使情況更加復雜 – 每個GC都有不同的內存分配策略;可以為磁盤本地內存分配留出相當大一部分的堆.
在沒有任何信息的情況下,堆總共有多大,你正在使用哪個GC(以及哪個虛擬機),有太多的變量指責罪魁禍首.
編輯:找出使用的GC(Java 7 (JDK 7) garbage collection and documentation on G1)并了解其具體的優缺點 – 尤其是它在堆壓縮方面提供的功能以及默認情況下其生成的大小.這將是要玩的參數.使用GC消息運行應用程序也可以提供有關最新情況的見解.
考慮到你的堆大小只有900MB,100MB空閑意味著你已經非常接近極限 – 我的第一個解決辦法是簡單地為VM分配一個更大的堆,比方說2GB.如果你需要節省內存,你唯一的選擇是調整GC參數(可能選擇另一個GC) – 說實話我沒有經驗.不過,有很多關于GC調整主題的文章.
總結
以上是生活随笔為你收集整理的java image 内存_Java BufferedImage内存消耗的全部內容,希望文章能夠幫你解決所遇到的問題。