我最近做的一个项目,在性能上有严重的问题,希望大家给些建议。情况如下:一个java程序,需要不断地从服务器上接收信息(一些二进制数据),并且把它们缓存在内存中。(一个hashmap来放它们)
每个二进制数据的大小大约0.5K,每秒约80个。
这些二进制数据被解析后,每一个都会生成一个对象,但每个对象内部都有一些更小的对象的引用,来表示信息内容,平均下来每个信息大约有20个这样的小对象。在生成对象的过程中,有大量的短命对象生成。
一天下来,大约会收到500000个这样的信息。合计起来,每天大约有250M左右的内存被固定占用。
有500000个这样的信息对象和500000*20个小对象被一直引用。我使用默认运行方式(使用JVM默认参数),很快就CPU100%,程序运行很慢,不一会儿就outofmemory。
后来改成了-verbose:gc -Xms60M -Xmx512M,发现在接收前5000个信息时很快,只有少量gc。但是超过5000后,系统就非常慢,并且在不断的fullgc,经常连续好几个。我反复检查了程序,没有发现内存泄漏,估计关键在于JVM的参数设置上,但是不会,希望大家给点意见!
每个二进制数据的大小大约0.5K,每秒约80个。
这些二进制数据被解析后,每一个都会生成一个对象,但每个对象内部都有一些更小的对象的引用,来表示信息内容,平均下来每个信息大约有20个这样的小对象。在生成对象的过程中,有大量的短命对象生成。
一天下来,大约会收到500000个这样的信息。合计起来,每天大约有250M左右的内存被固定占用。
有500000个这样的信息对象和500000*20个小对象被一直引用。我使用默认运行方式(使用JVM默认参数),很快就CPU100%,程序运行很慢,不一会儿就outofmemory。
后来改成了-verbose:gc -Xms60M -Xmx512M,发现在接收前5000个信息时很快,只有少量gc。但是超过5000后,系统就非常慢,并且在不断的fullgc,经常连续好几个。我反复检查了程序,没有发现内存泄漏,估计关键在于JVM的参数设置上,但是不会,希望大家给点意见!
解决方案 »
- java.io.File 指定非本机的上传路径!高分求!!!!
- 为什么子表中有数据,但是主表里子表的数据显示不出来?
- 新手求助~~~~~~~~~~~~~
- newbie's question about Command Pattern
- table 和 div 布局有什么区别?
- A Java Compile Question.
- 大家好,请问谁知道在JMenuItem中怎么用<Insert>这键盘键做为快捷键?
- 关于assertion的题
- 一个Java初学者的困惑,请指点! 谢!
- 再贴WebLogic Server 和 Weblogic Integration 有何不同,各是用来做什么的?
- 我把一棵树的结构和内容都存在数据库表里了..我怎么才能根据数据的内容,动态生成一棵树呀.
- 有没有可以生成java文件的包
硬件的话增加内存就好了内存修改为: -Xms250M -Xmx1025M你看看你的java实际占用了多少内存?
关键是看你程序,为社么会占用这么多的资源.优化程序(STRING边STRINGBUILDER?之类)或换个思路