java.lang.OutOfMemoryError: Java heap space,因为代码循环添加,导致内存溢出的问题

for(int i=0;i<list.size();i++){
				 final TProjectData projectData1 = list.get(i);
				projectData1 .setCount(list2.get(i));
				list.add(projectData1 );
			}
		报内存溢出
		

java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3210) ~[na:1.8.0_151]
	at java.util.Arrays.copyOf(Arrays.java:3181) ~[na:1.8.0_151]
	at java.util.ArrayList.grow(ArrayList.java:265) ~[na:1.8.0_151]
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239) ~[na:1.8.0_151]
	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231) ~[na:1.8.0_151]
	at java.util.ArrayList.add(ArrayList.java:462) ~[na:1.8.0_151]
	at com.boku.www.service.impl.ProjectDataServiceImpl.findPage(ProjectDataServiceImpl.java:208) ~[classes/:na]
	at com.boku.www.controller.ProjectDataController.search(ProjectDataController.java:109) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) ~[tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]

为什么会出现这种情况呢?
因为每循环一次,我们就在原有的基础上再加了一条数据,这时候的list.size()也同样+1了,所以我们永远都不可能结束循环,这样就会导致内存溢出。

解决办法:

			 for(int i=0;i<list.size();i++){
				final TProjectData projectData1 = list.get(i);
				//将项目成果数量,存放到对应的实体里面
				projectData1.setCount(list2.get(i));//会自动将数据set到实体类中,然后封装到list集合里面,而不用我们再将实体类添加到集合中
			}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的for循环在处理大量数据时可能变得很慢。为了优化for循环的执行速度,可以使用多线程和线程池来实现并行执行。引用中的第三种方法使用了并行流的方式来处理循环,可以通过.parallelStream()方法将列表转换为并行流,然后使用forEach()方法来遍历并打印每个元素。这种方法可以有效地利用多个线程来处理循环,提高执行速度。 另外,引用中的第二种方法使用了线程池来处理循环。首先创建一个固定大小的线程池,然后使用execute()方法提交任务给线程池处理。每个任务都在一个独立的线程中执行,并通过Runnable接口的run()方法来打印元素。最后,使用线程池的shutdown()方法来关闭线程池。 引用中的第一种方法也使用了线程池来优化循环执行。在这种方法中,通过定义一个Semaphore来控制并发线程的数量,创建一个固定大小的线程池,并使用execute()方法提交任务给线程池处理。每个任务通过Runnable接口的run()方法来打印元素,并通过Semaphore.release()方法释放许可。这种方法可以确保并发线程数量不超过指定的数量。 综上所述,如果for循环太慢,可以考虑使用并行流或线程池来优化执行速度。具体选择哪种方法取决于实际需求和系统配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java--for循环java多线程优化](https://blog.csdn.net/weixin_44951291/article/details/128166958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值