可能是操作系统的问题?
用java的源文件在系统里重新编译一下看看,安装的时候可能会有问题
上次用FreeBSD就是编译源文件装的jdk,之前的都有些问题
用java的源文件在系统里重新编译一下看看,安装的时候可能会有问题
上次用FreeBSD就是编译源文件装的jdk,之前的都有些问题
解决方案 »
- Frame中的组件位置老是变
- 推荐本关于Java的书
- 在eclipse中运行没错,但是,放进html文件中,运行就有错误了
- 请问去java.sum.com里下了jdk-1_5_0-doc\docs后都可以怎么样?
- 怎样写一个程序证实volatile的作用?
- SQL Server 2000 中文版下载分享
- 请问哪下载plugin,我英文不好,请大侠们给出具体网址好吗?谢谢了
- 有什么JBuilder的好书啊?推荐一下啦~
- java中如何获得客户机的硬盘序列号
- 联结interbase数据库库时出现错误!提示如下,请帮忙!
- 关于《Thinking in Java》中的源程序
- 有关actionPerformed的问题!高手帮忙!
…………
}catch (Exception e) {
System.out.println(e);
}
g.finalize();//强行指定g 清除垃圾看看? g对象占用内存肯定N大
}
public void setName(String s)
{
name = s;
}
在需要长时间运行的程序中,new 尽量少用。 一个 new 相当于一千个以上复制语句。性能不好,内存也不能回收。
你用线程了吗?你用的sun10000等大型机是多cpu的吗?也有可能是线程上出的问题。
全部程序已经在相应的机器上编译通过……编译没有问题。同样上面的测试代码在上面都会出错……
同样,已经测试过强制使用gc()来回收内存……但是,结果一样,没用。
今天中午测试的用到Runtime().totleMemory()和Runtime().freeMemory()两个方法来检测内存,发现内存可以回收,但进程内存使用数同样直线上升,达到1G……而且不断上升……现在应该排除程序问题。但对于drawString()方法,如果我注释掉以后,内存就不再出现狂涨的现象……实在不解……大家再给想想,谢谢
能肯定是你所说的问题嘛?
你用线程了吗?你用的sun10000等大型机是多cpu的吗?也有可能是线程上出的问题。
========================================================================根本就没有用到多线程,
我用上面的代码测试都通不过……
会创建一个新的Graphics2D对象,而Graphics2D对象是本地对象,需要手工清楚的。
在使用完Graphics2D后调用g.dispose()方法。
请指教,谢谢!
进行测试发现问题出在drawString()上……每次drawString后,内存都会有规律的增加,并且不回收……直到关闭服务……
=========================================你这种问题应该是正常的,内存管理由JVM管理,“内存都会有规律的增加,并且不回收……直到关闭服务……” , 因为每一个操作系统上的JVM实现是不同的,所以这个问题应该是正常的。 由于Solaries的线程和WINDOWS ,LINUX线程有比较大的差异,所以关于线程的管理,Solaries的和WINDOWS , LINUX的有非常的不同 g.drawString() 会立刻返回的,这个方法会产生一个线程去画图,于是它就可以继续执行了。基本上JAVA所有界面处理都有线程的。 Solaries的线程是绿色线程,如果没有明确指示,它会一直执行到底,WINDOWS ,LINUX线程即使没有明确指示,系统都会自动切换线程的。
总的说来,你的问题不是问题,它是正常的,不同的JVM有不同的策略。由于Solaries和普通的操作系统的线程有很大的不同,所以遇到线程时,SolariesJVM和普通操作系统的内存管理有很大的不同
“难道你没有考虑哪个地方需要释放内存吗”天哪!混到了五个三角的朋友,你不知道Java不能显式释放内存吗?我的看法:你的代码在某个地方碰到了和虚拟机的实现方式相关的东西,就是说你代码的正常运行依赖于特定的虚拟机实现,所以换一个虚拟机就不行了。由于我没学过图形包,所以也不知道到底是哪里出了问题……
在输出图象后关闭 output 试试.
如果不drawString,其它操作会吗?
总的说来,你的问题不是问题,它是正常的,不同的JVM有不同的策略。由于Solaries和普通的操作系统的线程有很大的不同,所以遇到线程时,SolariesJVM和普通操作系统的内存管理有很大的不同
===========================================================================真的不成问题吗?它的内存是要增加,但是,我38G的内存,不光要跑这一个服务啊……吃掉我5个G的内存我还能够用,但是到了10G,还不去回收,呵呵,你说算不算问题呢?
我别的程序还要运行在上面的……
我建议你找本java虚拟机的书再看看,java对内存的管理。虚拟机对内存的管理我也只了解大概和你说一下,首先java的虚拟机开一块专用的内存区用来做为java专用的内存区,所有java程序的内存分配都在这一块,到内存使用到一定程度的时候,jvm自动进行gc回收无用的内存(这个过程,可以认为是随机的)。
至于你说的solaris方面的线程这个问题,我还真的不了解。
但我知道,我在一台小的服务器上调试的时候,不会出现这个问题,装的是solaris的 :(
所以,我非常的郁闷……还有别的什么可能呢?帮我想一下
game0ver12345(sfsfdsfdsdfsf)
总的说来,你的问题不是问题,它是正常的,不同的JVM有不同的策略。由于Solaries和普通的操作系统的线程有很大的不同,所以遇到线程时,SolariesJVM和普通操作系统的内存管理有很大的不同
===========================================================================真的不成问题吗?它的内存是要增加,但是,我38G的内存,不光要跑这一个服务啊……吃掉我5个G的内存我还能够用,但是到了10G,还不去回收,呵呵,你说算不算问题呢?
我别的程序还要运行在上面的……
我建议你找本java虚拟机的书再看看,java对内存的管理。虚拟机对内存的管理我也只了解大概和你说一下,首先java的虚拟机开一块专用的内存区用来做为java专用的内存区,所有java程序的内存分配都在这一块,到内存使用到一定程度的时候,jvm自动进行gc回收无用的内存(这个过程,可以认为是随机的)。
至于你说的solaris方面的线程这个问题,我还真的不了解。
但我知道,我在一台小的服务器上调试的时候,不会出现这个问题,装的是solaris的 :(
所以,我非常的郁闷……还有别的什么可能呢?帮我想一下
===============================================================jvm 会自动收集垃圾的,基本上每个JVM都有自己收集垃圾的策略, “吃掉我5个G的内存我还能够用,但是到了10G,还不去回收” 当JVM吃了5个G的内存时不收集垃圾,但它可能吃10G的时候会收集垃圾。 所以你以为JVM会一直不收集垃圾直到你的机器死掉的想法是不可能发生的。 你可以把total_number改大100倍,看机器会不会死掉?