java中大量使用二维数组和for循环会发生内存泄露吗?该怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中大量使用二维数组和for循环会发生内存泄露吗?该怎么解决?相关的知识,希望对你有一定的参考价值。

如下面所示
int iRet = -1;
// RTXSvrApi RtxsvrapiObj = new RTXSvrApi();
String pdeptId = "0";//父节点
ArrayList lists = new ArrayList();
String depts[] = null;
depts = RtxsvrapiObj.getChildDepts(pdeptId);//子节点
if (depts != null)
for ( int j = 0 ; j< depts.length;j ++)
if(RtxsvrapiObj.IsHasChildUser(depts[j]))
String b[]=RtxsvrapiObj.getDeptUsers(depts[j]);
for(int m=0;m<b.length;m++)
lists.add(b[m]);


if(RtxsvrapiObj.IsHasChildDept(depts[j]))
String deps[]=null; //子节点的子节点
deps = RtxsvrapiObj.getChildDepts(depts[j]);
for ( int i = 0 ; i< deps.length;i ++)
if(RtxsvrapiObj.IsHasChildUser(deps[i]))
String []c=RtxsvrapiObj.getDeptUsers(deps[i]);
for(int n=0;n<c.length;n++)
lists.add(c[n]);





当循环次数过多时,建议用StringBuffer。
例如String str = new String("welcome to ");
str += "here";

并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.总共3个对象来完成操作 对象1="welcome to ",对象2="here" 对象3="welcome to here";所以可以看出用String效率低下,当循环数量过大时肯定会内存溢出。
StringBuffer 相当于分配了一块内存给程式,程式可以不断对这块内存擦写,提高效率。
形象的比喻就是要用杯子给一个桶里装水,而String作用就像一次性纸杯,要想装满必须得好多个这样的纸杯,StringBuffer就好比一个玻璃杯,你可以无限次使用,直至装满桶。

StringBuffer的各种方法功能,一般API都有,就不一一罗列了。(不懂可以追问)
参考技术A 意外的发生都是不可控的,只有你在可能发生意外的地方,捕获并处理它。这也是try catch 存在的意义。 参考技术B 不是死循环的话一般不会!

数组相关知识

1.main函数中String[  ] args是一个字符串数组。可以用Syetem.out.println(args[ ])在命令提示符(dos中)。在javac编译后,在java执行时输入字符串。如果要输入args[0][0] 则输入两个字符串 回车便会输出。如果不输入,会报错;

2.深刻理解数组。特别是二维数组和高维数组,需要弄明白他们的遍历,一般一维用一个for循环,二维用一个for循环嵌套一个for循环,以此类推;

3.在myeclipse中,可以使用alt+/快捷按出需要的程序和单词;

 

以上是关于java中大量使用二维数组和for循环会发生内存泄露吗?该怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

java中何用for循环将一个二维数组的值付给另外一个二维数组

java使用foreach语句遍历二维数组如何实现?

范围大时“for / range”会不会消耗大量内存? [复制]

使用两个for循环给二维数组赋固定值,并输出?

在硬件级别的“for循环”中会发生啥?内存是自动分配的吗? (C++)[关闭]

java学习第5天