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调整主题的文章.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值