图像被缓存并占用了我的堆空间

Sumit:

这个问题是我对上一个问题的回答的结果

我被要求使用Eclipse MAT来调查正在吞噬我的东西。以下是我的观察(顶级消费者):

class sun.awt.SunToolkit                                 333.7 MB
com.tennisearth.service.impl.CacheManagerServiceImpl     136 MB
org.apache.jasper.servlet.JspServlet                     91.5 MB

我已经解决了这个问题CacheManageServiceImpl,但需要帮助SunToolkit

以下是创建Image对象的代码(内部使用SunToolkit.imgCache

Image img = new ImageIcon(imagePath).getImage();
int imageWidth = img.getWidth(null);
int imageHeight = img.getHeight(null);

请注意,创建Image对象只是为了获得图像的宽度/高度,这在某些逻辑中稍后需要。

有没有办法禁用SunToolkit图像缓存?更好的是,有没有办法清除此缓存?还是有更好的方法来检索此信息?

顺便说一句,供您参考,我正在使用以下命令运行jboss(请注意堆大小参数):

java -Dprogram.name=run.sh -server -Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m -verbose:gc -Xloggc:/data1/logs/jboss/GC.log -XX:+HeapDumpOnOutOfMemoryError -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false -Djava.net.preferIPv4Stack=true -Djava.library.path=/usr/local/java/jboss-4.2.2.GA/bin/native -Djava.endorsed.dirs=/usr/local/java/jboss-4.2.2.GA/lib/endorsed -classpath /usr/local/java/jboss-4.2.2.GA/bin/run.jar:/usr/local/java/jdk1.6.0_06/lib/tools.jar org.jboss.Main -c default -b <IP_ADDRESS> -Djboss.messaging.ServerPeerID=1

住友

约恩·霍斯特曼:

图像缓存似乎由名为SoftCache的类实现,其文档指出以下内容:

Map接口的内存敏感实现

SoftCache对象使用java.lang.ref.SoftReference实现存储器敏感的哈希映射。如果垃圾收集器在某个时间点确定某个SoftCache条目中的值对象不再是可强访问的,则它可以删除该条目以释放该值对象所占用的内存。SoftCache确保在虚拟机抛出之前完全清除所有对象OutOfMemoryError

因此,我不必担心此缓存占用的内存,因为当其他地方需要该内存时,它将自动清除。

编辑:阅读了SyntaxT3rr0r的注释后,我认为仍然值得调用flushImage。如果这是larget方法的一部分,则还可以将image设置为null或进行重构,以便它尽快超出范围。

另一种可能性是尝试使用ImageIO Api来获取宽度和高度。通过获取图像类型ImageReader应该可以做到这一点

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java运行时本身占用的堆空间

Docker容器日志占用了我所有的磁盘空间

让图像仅占用剩余空间

我的Xcode安装占用了大量空间;如何减少模拟器使用的空间?

纱线缓存占用大量空间

我的行占用了太多的高度

由于pg_largeobject,Postgres DB占用了大量空间

React Native图像占用了所有可用的垂直空间

MySQL-我可以查询某些行或列占用了多少磁盘空间吗?

由于修订,CouchDB占用了大量空间

Wubi在Win 7上占用了我所有的磁盘空间

从文档加载本体花费太多时间,并占用了我所有的内存空间

找不到我的文件,但它们占用了空间

面板在ExtJ中占用了不必要的巨大空间

zsh进程占用了我95%的CPU

Firefox 7占用了我的CPU

Div占用了新的一行,而不是只占用了更多的垂直空间

cassandra堆用法-什么占用空间?

在Ubuntu 16.04上占用了什么空间?

我的Windows文件夹占用了太多空间-如何减少它?

什么占用了我的磁盘空间?

ListView占用了所有屏幕空间

Ionic Analytics数据占用了大部分localStorage空间

/ var / lib / ureadahead / debugfs占用了我68%的磁盘空间

假设我们有一个很大的结构,在分配时占用了巨大的内存空间

为什么我的图像被移动而不是创建多个图像

=> / 正在使用 228.23GB 的 95.8% 但我不知道是什么占用了空间?

GDM3 占用了我的大部分 SSD 空间 Ubuntu 20.04

我的应用占用了 iPad 存储空间的幻影空间