0 0

这段代码是否有内存溢出的情况,如果有怎么修改呢?0

	public List<ModuleDefineInfo> findUserModuleList(long userID) {
		try{
		Set<String> roleIDs=new HashSet<String>();
		roleIDs.addAll(loginDao.findRoleIDByUser(userID));
		List<String> groupIDs=loginDao.findGroupIDByUser(userID);		
		if(groupIDs!=null && !groupIDs.isEmpty()){
			roleIDs.addAll(loginDao.findRoleIDByGroup(userID));
			roleIDs.addAll(loginDao.findRoleIDByUserAndGroup(userID));
		}
		String roleIDCondStr=getCondStr(roleIDs);
		List<String> moduleIDs=loginDao.findModuleIDByRoleIDs(roleIDCondStr);
		String moduleIDCondStr=getCondStr(moduleIDs);
		List<ModuleDefineInfo> list=loginDao.findParentModuleList(moduleIDCondStr);
		List<RoleModuleFunctionVo> functions=loginDao.findModuleFunctions(roleIDCondStr, moduleIDCondStr);
		setFunctionToModule(list,functions);
		return ModuleUtil.constructTree(list,ModuleUtil.DESC);
		}catch(Exception e){
			logger.error(e,e);
			throw new RuntimeException(e);
		}
	}	
	
	private void setFunctionToModule(List<ModuleDefineInfo> modules,List<RoleModuleFunctionVo> functions){
		for(ModuleDefineInfo m:modules){
			if(!m.isHasURL()) continue;
			for(Iterator<RoleModuleFunctionVo> it=functions.iterator();it.hasNext();){
				RoleModuleFunctionVo f=it.next();
				if(m.getModule_id().equals(f.getModule_id())){
					
					List<RoleModuleFunctionVo> moduleFuncs = m.getFunctions();
					Boolean bExist = false;
					if (moduleFuncs != null) {
						for(Iterator<RoleModuleFunctionVo> itt=moduleFuncs.iterator();itt.hasNext();) {
							RoleModuleFunctionVo ff=itt.next();
							if (ff.getFunction_id().equals(f.getFunction_id())) {
								bExist = true;
								break;
							}
						}
					}
					if (bExist)
						continue;
					
					m.addFunction(f);
					it.remove();
				}
			}
		}
	}

2014年2月21日 08:46

1个答案 按时间排序 按投票排序

0 0

代码和业务有一定的相关性,没仔细看:

如果Service涉及到的操作只有局部变量,是不会有内存泄露的(局部变量调用完以后会在下次Minor GC的时候被回收);

一个会内存泄露的例子:
。 类有一个Map之类的属性(类是单例的或者是Spring的Bean)
。 只有Add操作,没有对称的remove操作。

2014年2月25日 11:18

相关推荐

    易语言防止文件内存溢出源码

    通过学习和理解这段代码,开发者可以更好地掌握在易语言中处理大文件和防止内存溢出的技巧,提高程序的稳定性和效率。 由于没有提供具体的源码内容,无法深入讨论细节,但以上概述了在易语言环境下防止文件内存溢出...

    图片过大引起的内存溢出解决方案

    下面是一段具体的示例代码,展示如何使用上述方法解决大尺寸图片引起的内存溢出问题: ```java package xiaosi.compress; import android.app.Activity; import android.graphics.Bitmap; import android.graphics...

    java IBM websphere 内存溢出 javacore deapdump CPU内存分析工具

    Java IBM WebSphere应用服务器在运行过程中可能会遇到各种性能问题,其中最常见的挑战之一是内存溢出。内存溢出是指应用程序消耗的内存超过了系统所能提供的限制,导致程序崩溃或性能急剧下降。在这种情况下,开发者...

    基于HeapAnalyzer456.jar 分析java内存溢出

    8. **对比分析**:如果有多次内存溢出的堆转储文件,可以进行对比分析,查看内存使用的变化趋势,帮助确定问题是否已得到改善。 在实际使用中,结合标签“HA”,我们可以知道这个工具的简称,方便在讨论和文档中...

    使用MAT分析Tomcat内存溢出

    在Java开发过程中,Tomcat作为常用的Java应用服务器,有时会遇到内存溢出(Out Of Memory,OOM)的问题,这可能导致应用程序崩溃或者性能急剧下降。内存溢出问题的排查和解决是一项重要的技能。本文将详细讲解如何...

    java 内存溢出分析工具 HeapAnalyzer

    Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...

    eclispe启动内存溢出问题

    如果JVM分配给Eclipse的内存空间不足,尤其是在处理大型项目或者加载大量插件的情况下,就容易出现内存溢出错误。 ##### 2. 堆内存不足 堆内存是JVM用于存储对象实例的主要区域。当应用程序创建的对象过多,而堆...

    内存溢出及锁表问题的分析与解决.doc

    内存溢出问题可以通过修改 JVM 启动参数、检查错误日志、对代码进行走查和分析、使用内存查看工具等步骤来解决。同时,也可以通过使用 Java 的内存管理机制来避免内存溢出,如使用分页查询、避免大循环重复产生新...

    Java内存溢出和内存泄露共4页.pdf.zip

    6. 代码审查和测试:定期进行代码审查,检查可能引起内存问题的代码段,并通过压力测试发现潜在的内存问题。 7. 优化数据结构和算法:合理选择数据结构,如使用Map替代List存储键值对,可以提高内存效率。优化算法...

    Linux下用Mtrace来检查程序内存溢出

    这有助于找出可能导致内存泄漏的代码段。 总的来说,Mtrace是Linux环境下调试内存溢出和泄漏问题的强大工具。通过简单地在程序中插入`mtrace()`调用,设置环境变量,然后运行和分析日志,开发者就能有效地定位内存...

    内存溢出详解

    ### 内存溢出详解 #### 一、内存溢出概念与原因 内存溢出(Memory Overflow)是指程序在运行过程中,对内存的使用超过了系统所能提供的内存容量或分配给该程序的最大内存限制,导致程序崩溃或者系统不稳定的现象。...

    关于static的小结(Java内存溢出)

    文章中提供了一个C++示例代码,虽然这段代码是为了说明`static`在C++中的作用,但我们可以从中了解到一些关键概念: ```cpp void staticLocalVar() { static int a = 0; // 只初始化一次,在函数首次调用时 cout ...

    websphere查看内存溢出工具ha456.jar

    描述中提到的“ha456.jar可以准确找到内存溢出位置”,意味着它具有强大的分析能力,能够精确定位到导致内存溢出的代码段,这对于优化代码和配置服务器参数至关重要。这通常涉及到识别哪些对象被过度创建或无法正确...

    tomcat内存溢出

    1. **应用程序内存泄漏**:如果部署的应用程序存在内存泄漏的情况,随着时间的推移,未释放的对象将逐渐消耗掉越来越多的内存资源,最终导致内存溢出。 2. **配置不当**:默认情况下,Tomcat对JVM的最大堆内存分配...

    缓冲区溢出示例代码课件ppt

    本课件主要围绕“缓冲区溢出”这一重要的计算机安全问题展开,通过详细的PPT演示和示例代码,旨在帮助学习者理解和掌握缓冲区溢出的基本原理及其防范措施。缓冲区溢出是软件开发中常见的安全漏洞,可能导致系统崩溃...

    gflags x86 x64 堆栈溢出内存检测工具

    堆栈溢出通常发生在函数调用时,当局部变量分配超过了函数调用栈的容量,就会溢出到相邻的内存区域,可能导致程序崩溃,甚至可能被恶意利用,执行任意代码。gflags提供了一种名为堆栈回写保护(Stack Commit Check)...

    缓冲区溢出程序代码分析

    1. **Shellcode注入**:攻击者通过构造特定的输入数据,使其包含一段恶意的机器码(即Shellcode),并设法使程序执行这段代码。 2. **返回地址重定向**:通过修改函数调用栈中的返回地址,指向Shellcode所在的位置,...

    郑州电票内存溢出分析方法和结果

    【郑州电票内存溢出分析方法和结果】的讨论主要集中在如何分析和处理Java应用程序中的内存溢出(OOM)问题。内存溢出是由于程序在运行过程中分配的内存超过了系统可提供的内存,导致系统崩溃或者性能急剧下降的现象...

    windwos操作系统下缓冲区溢出演示源代码

    这种情况可能导致数据覆盖相邻内存位置,进而破坏程序的正常执行流程,甚至允许攻击者执行任意代码。本教程将通过提供的源代码来演示这一过程。 首先,我们需要理解缓冲区溢出的基本概念。缓冲区是程序中用于临时...

    java 内存溢出分析工具 CoreAnalyzer

    为了解决这一问题,Java提供了多种内存分析工具,其中CoreAnalyzer是一款专业的Java内存溢出分析工具。下面将详细介绍CoreAnalyzer的功能、使用方法以及如何通过它来分析和解决内存问题。 CoreAnalyzer主要功能: 1...

Global site tag (gtag.js) - Google Analytics