迭代器当中的死循环导致内存溢出

1.Java语言中for循环结构的基本语法和执行顺序是?
(1)、for循环编程语言中的语句之一,用于循环执行。for语句比while语句和do-while都要灵活,是一种功能更大、更常用的循环语句,它的一般基本语法格式为:

1 for(表达式1;表达式2;表达式3)
2 {
3 //循环体
4 }

其中,表达式都可以省略,但是分号不可省略。

(2)、for循环的执行顺序如下:

例如:

1 for(i=1; i<=10; i++)
2 {
3     语句;
4 }

示例中先给i赋初值1, 判断i是否小于等于10, 若是则执行语句, 之后值增 加1。再重新判断, 直到条件为假, 即i>10时, 结束循环。

2.错误示例(死循环)for循环中初始化语句只执行一次,即本示例的it.next(),如此执行下去,会导致服务器宕机

1 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
2 for(int i = 0; i < 5; i++) {
3   map.put(i, i);
4 }
5
6 Iterator<Integer> it = map.values().iterator();
7 for(int i = it.next(); it.hasNext();) {
8   map.remove(i);
9 }

本示例当中i赋初始值为0,删除为0的元素后,由于指针没有后移指向下一个待删除元素,导致一直在删除值为0的元素,占用资源,且本示例当中的map.remove(i)会引起java.util.ConcurrentModificationException

正确示例

 1 Map<Integer, Integer> map = new HashMap<Integer, Integer>();
 2 for(int i = 0; i < 5; i++) {
 3     map.put(i, i);
 4 }
 5
 6 for(Iterator<Integer> it = map.values().iterator(); it.hasNext();) {
 7     int i = it.next();
 8     it.remove();
 9     System.out.println(i);
10 }

 

时间: 2024-10-26 13:45:02

迭代器当中的死循环导致内存溢出的相关文章

Android加载图片导致内存溢出(Out of Memory异常)

Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证):  方案一.读取图片时注意方法的调用,适当压缩  尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗

图片--Android加载图片导致内存溢出(Out of Memory异常)

Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证):  方案一.读取图片时注意方法的调用,适当压缩  尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗

WPF循环加载图片导致内存溢出的解决办法

程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成"动画". 生成BitmapImage的方法有多种: 1. var source=new BitmapImage(new Uri("图片路径",UriKind.xxx)); 一般的场景使用这种方法还是比较方便快捷,但是对于本场景,内存恐怕得爆. 2. var data =File.ReadAllBytes("图片路径"); var ms = new System.IO.MemoryStr

php查询mysql返回大量数据结果集导致内存溢出的解决方法

web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答案是: mysql_query 和 mysql_unbuffered_query 两个函数 首先来分析一个典型的实例:在执行下面的代码的时候就会导致php请求mysql返回结果太多(10W以上)导致PHP内存不够用. while ($row = mysql_fetch_assoc($result))

POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384列. excel2003是以二进制的方式存储,这种格式不易被其他软件读取使用:而excel2007采用了基于XML的ooxml开放文档标准,ooxml使用XML和ZIP技术结合进行文件存储,XML是一个基于文本的格式,而且ZIP容器支持内容的压缩,所以其一大优势是可以大大减小文件的尺寸. 2. 大批

Android学习 ——引用图片导致内存溢出java.lang.OutOfMemoryError

今天遇到这个问题就是从一个输入流里调用BitmapFactory.decodeFile(name)得到一个bitmap报的错.第一次调用都没问题,第二次再次调用就会报上面那个内存溢出的问题.而且有的手机报有的手机不报.研究了半天终于解决.首先分析了下原因,应该是图片占用的内存超过了系统虚拟机可分配的最大限制.不同手机可能分配的最大值不一样.后来找到解决办法主要是设置BitmapFactory.Options.  BitmapFactory.Options option = new BitmapF

ionic2 因为项目太大,编译导致内存溢出的解决方案

只需要改动一个文件即可 原始文件内容如下: @IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" "%~dp0\node_modules\ionic\bin\ionic" %* ) ELSE ( @SETLOCAL @SET PATHEXT=%PATHEXT:;.JS;=;% node "%~dp0\node_modules\ionic\bin\ionic" %* ) 更改为 @IF EX

php的amqp扩展set导致内存溢出

最近做的一个项目中需要用到rabbitmq,按照自己的之前的一篇文章进行安装测试,都ok了,但是实际使用过程却发现很大的问题: 场景是这样的: 我建了10个队列,写了一个循环,目的是往每个队列中写入3万条数据,得到的结果是经过N多次的测试,程序在写到第四个队列的时候,就被杀死了:经过top命令,监控内存,发现程序在执行的过程中,cpu使用率达到70%以上,php进程占用内存可以达到2800M多,进而php进程消失,cpu  (待续)

cached过高导致内存溢出 java head space

最近公司线上遇到老是内存溢出检查后发现cached过高 命令:free -m 命令:sync    //将缓存写入硬盘 cat /etc/redhat-release 这个是查看系统版本的命令centos or other. 命令:echo 1 > /proc/sys/vm/drop_caches  清理缓存 权限可能是root 由于是搜索查询 的一个系统所以IO写入索引较多所以cached过高且与linux机制有关 # 说明,释放前最好sync一下,防止丢数据 #!/bin/bash #系统分