这个问题是基于我之前的问题所得到的答案而来。
有人建议我使用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
Sumit