针对你说的这种情况,可以使用jvisualvm.exe直接查看内存使用情况,查看是否是有大对象。
创新互联建站是一家专注于成都网站设计、网站建设与策划设计,信阳网站建设哪家好?创新互联建站做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:信阳等地区。信阳做网站价格咨询:13518219792
数据库连接没有关闭,代码不合理,循环过多,创造了太多的对象,java还真不占什么内存
java自带的jvisualVM,就有这个功能。
你可以做个内存的dump,然后用eclipse的mat插件,看一下。
如果还看不懂,就google一下,看看mat怎么用。
如果还不会,就得好好学学英文了。。。。
第一对所有的代码包括页面中的java代码都进行一遍彻底的回顾检查,
1.对那些静态(static)的对象要特别留神,特别是类型为Map,List,Set的,静态的变量会一直驻存在内存中,生命周期比较长,不会被垃圾器回收。
2.对于代码,要审查是否生成了大量的冗余的对象,还有一些逻辑业务处理的类,
算法是否过于复杂,调整算法,对于代码认真审查,再仔细重构一遍代码,能提高代码质量,提高程序运行稳定性。
3.Java中的内存溢出大都是因为栈中的变量太多了。其实内存有的是。建议不用的尽量设成null以便回收,多用局部变量,少用成员变量。
1),变量所包含的对象体积较大,占用内存较多。
2),变量所包含的对象生命周期较长。
3),变量所包含的对象数据稳定。
4),该类的对象实例有对该变量所包含的对象的共享需求。
4.在我的程序中对静态变量的优化后,使程序占用内存量至少提升了5k-10k。所以也不容忽视。
第二还有就是String类相关的东西:
1.字符串累加的时候一定要用StringBuffer的append方法,不要使用+操作符连接两个字符串。差别很大。而且在循环或某些重复执行的动作中不要去创建String对象,因为String对象是要用StringBuffer对象来处理的,一个String对象应该是产生了 3个对象(大概是这样:))。
2.字符串length()方法来取得字符串长度的时候不要把length放到循环中,可以在循环外面对其取值。(包括vector的size方法)。特别是循环次数多的时候,尽量把length放到循环外面。
int size = xmlVector.size();
for (int i = 2; i size; i++) {
。。。
}
3 写代码的时候处理内存溢出
try{
//do sth
....
}catch (outofmemoryerror e){//可以用一个共通函数来执行.
system.out.print (“no memory! ”);
system.gc();
//do sth again
....
} 4.对于频繁申请内存和释放内存的操作,还是自己控制一下比较好,但是System.gc()的方法不一定适用,最好使用finallize强制执行或者写自己的finallize方法。 Java 中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。
如果你有360程序之类的 第一个方法就是使用新版的360安全卫士 找到左下角的类似彩色风扇的东西 鼠标到那边就会在那边弹出窗口 点“立即加速” 在点之前 先取消勾选 Java SE Binary 我不记得是什么。。
第二个方法是 整理系统的资源 等有了够多的RAM空间就设置较大限数 如果你电脑是2GB 那么可以1.5G 也就是1500MB
不行就换个好的电脑 或者尝试重启
没有360就使用系统自带的 Windows任务管理器 找到占用大的 (不能包括java.exe和Javaw.exe 点关闭进程会被迫关闭正在运行的Java进程 还有一个是svchost 系统功能 关闭就自启动 也就叫非法关机)由于时间关系 就这样了