小编Sum*_*mit的帖子

我的应用程序不断运行Full GC!

我是性能调优应用程序的新手,并且搞清楚GC的工作原理,所以可能在第一百万次问同样的问题!

问题是2到3周前,某种程度上我的Web应用程序时不时地崩溃了.查看日志,推断出由于OOM错误导致崩溃:

Caused by: java.sql.SQLException: java.lang.OutOfMemoryError: Java heap space
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:430)
    ...
Run Code Online (Sandbox Code Playgroud)

14:29:58,469 ERROR [[dispatcher]] Servlet.service() for servlet dispatcher threw exception
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:193)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
    at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:35)
    at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:969)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.tennisearth.dao.hibernate.HibernateCommentaryDao.getCommentary(HibernateCommentaryDao.java:52)
    at com.tennisearth.service.impl.CommentaryServiceImpl.getCommentary(CommentaryServiceImpl.java:454)
    at com.tennisearth.service.impl.CommentaryServiceImpl.getCommentaryMap(CommentaryServiceImpl.java:165)
    at com.tennisearth.web.controllers.WidgetsController.commentaryList(WidgetsController.java:704)
    at com.tennisearth.web.controllers.WidgetsController.widgets(WidgetsController.java:290)
    at sun.reflect.GeneratedMethodAccessor259.invoke(Unknown Source)
            ...
Run Code Online (Sandbox Code Playgroud)

随后,我开始记录GC日志,发现最初在服务器启动时,GC正常运行:

3.808: [GC 56505K->5808K(251264K), 0.0120840 secs]
3.820: [Full GC 5808K->5614K(251264K), 0.0540460 secs]
7.169: [GC 71214K->9589K(251264K), 0.0068780 secs]
8.173: [GC 75189K->13543K(251264K), 0.0174120 …
Run Code Online (Sandbox Code Playgroud)

java jboss garbage-collection

8
推荐指数
1
解决办法
4829
查看次数

使用HashMap作为另一个HashMap的键

我有一个要求,我需要使用一组值映射一组配置,理想情况下由Map<Map<String, Object>, Map<String, Object>>结构表示.

主Map的配置和值部分都是任意的,因此,我无法使用具体的类.

请提供一些有关此结构的反馈.可以将地图用作另一个地图的关键字.做了一些研究,我能够确定Map的equals方法利用所有底层的Keys&Values来将两个Maps视为相等.此外,Map的HashCode基于Map的Keys的Hashcodes.这个IMO应该满足使用Map作为关键字的最低要求.

在我继续实施之前,我仍然希望有人来验证这一点.如果有更好的解决方案/设计,有人可以建议,请随时这样做.

编辑

我最终使用简单的代字号('〜')和管道('|')分隔String作为键并在需要时对其进行解构.感谢所有帮助过的人.

java collections hashmap

6
推荐指数
1
解决办法
2583
查看次数

图像被缓存并吃掉了我的堆空间

这个问题是我之前提出的问题答案的结果.

我被要求使用Eclipse MAT来调查吃掉堆的东西.以下是我的观察(热门消费者):

class sun.awt.SunToolkit                                 333.7 MB
com.tennisearth.service.impl.CacheManagerServiceImpl     136 MB
org.apache.jasper.servlet.JspServlet                     91.5 MB
Run Code Online (Sandbox Code Playgroud)

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

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

Image img = new ImageIcon(imagePath).getImage();
int imageWidth = img.getWidth(null);
int imageHeight = img.getHeight(null);
Run Code Online (Sandbox Code Playgroud)

Plz注意,仅创建Image对象以获取图像的宽度/高度,稍后在某些逻辑中需要该宽度/高度.

有没有办法禁用SunToolkit图像缓存?更好的是,有没有办法清除这个缓存?或者有更好的方法可以检索这些信息吗?

BTW供您参考,我使用下面的命令来运行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
Run Code Online (Sandbox Code Playgroud)

萨米特

java caching image image-caching

5
推荐指数
1
解决办法
1463
查看次数