java线程池 读写10万行文件进行遍历时,占用物理内存溢出
java系统:主线程先读到这3万行数据放到一个list(手机号码、id),然后开启一个线程循环读取另外10个文件,每个文件平均8万行,每读完一个文件将这8万行数据放到一个...
java系统:主线程先读到这3万行数据放到一个list(手机号码、id),然后开启一个线程循环读取另外10个文件,每个文件平均8万行,每读完一个文件将这8万行数据放到一个新list(id),然后将这个list跟3万行的list 遍历通过相同的id获取3万行里的手机号码。 发现读到第4个文件时内存溢出,注意不是堆内存溢出。于是我监控系统内存,重新执行时,发现物理内存飙升。接近读到第5个文件时正好物理内存占满,线程被kill掉。但系统没挂。只是这个线程不执行了。但是物理内存等了半个小时还是占满的。 我知道线程是占用物理内存的,linux 每次读写文件的缓存占用内存(buffers cached)为啥不会释放掉,为啥内存一直累加上去,gc是没用的,因为是物理内存。请问有啥办法。 我jvm 堆大小最大最小设置的都是1024M 。
异常:"billChargeExecutor-1" java.lang.OutOfMemoryError: GC overhead limit exceeded
这个异常如何解决,是什么问题,表象上看物理内存被占光了。
百度说jvm gc行为中超过98%以上的时间去释放小于2%的堆空间时会报这个错误。这是啥意思,是GC过于频繁吗,我的jvm设置大小 1024M的,没有手动去回收,怎么解决这个异常呢。
linux总内存就2G。 展开
异常:"billChargeExecutor-1" java.lang.OutOfMemoryError: GC overhead limit exceeded
这个异常如何解决,是什么问题,表象上看物理内存被占光了。
百度说jvm gc行为中超过98%以上的时间去释放小于2%的堆空间时会报这个错误。这是啥意思,是GC过于频繁吗,我的jvm设置大小 1024M的,没有手动去回收,怎么解决这个异常呢。
linux总内存就2G。 展开
3个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询