jre1.4在一个IE控件中,一个while中循环读取一个文件到内存,每次读取5m且读取后立刻释放,在相同硬件(3.2g/4g内存)环境下winXp和win2k下无论每次读取多少到内存都不会有问题,但在vista和win2008下每次读取超过5m则会在累积20m以后内存溢出。请高手解释一下,或给出解决方案
to rffffffff007:我的环境中不是vista自带的jre,而是jre1.4.1_01 windows i586版本。
to daay1986:并非手动垃圾回收,而是通过将保存读取文件的字节数组变量置空。
这些不能解释为什么相同的程序在winxp和win2k系统下运行没有问题。
to rffffffff007:我的是在客户端运行的一个控件,不可能去设置java初始内存的。
java垃圾回收的速度是如何的?是否受操作系统影响?
答案:3 悬赏:70 手机版
解决时间 2021-02-08 14:54
- 提问者网友:欲劫无渡
- 2021-02-08 00:25
最佳答案
- 五星知识达人网友:怀裏藏嬌
- 2021-02-08 00:46
java回收垃圾是他的弱点,启动没有规律可循,只能靠你自己尽量的优化算法了。你这个问题可能是本身系统分配给java的内存不够造成的。而且你说的释放内存如果是手动启动垃圾回收的话,本身启动垃圾回收会花费双倍的内存空间。只会让内存更吃紧,手动启动垃圾回收不是值的推荐的方法。另外读写文件还有个资源的释放问题。
全部回答
- 1楼网友:西岸风
- 2021-02-08 01:38
是垃圾 就会回收 不确定是什么时间
gcstring s = new gcstring("s");
如果变量出了作用域,就是垃圾
变量名 失去 指向就会变成垃圾
而对象失去变量名的指向 同样变成垃圾
比如匿名对象 本身就是垃圾
- 2楼网友:逃夭
- 2021-02-08 01:23
vista自带jre。也许是这个问题。
如果保证在同样的jre环境下。并且为程序分配同样大小的内存限制。是不可能出线这个情况的啊。java几乎不依赖系统。
java的垃圾回收不是即时的。但是似乎在接近程序的内存限制的时候会立刻回收。
使用
java -Xms -Xmx
重新设置相同的初始、最大内存试试看吧
以我的能力无解了。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯