黑马程序员技术交流社区
标题:
能不能给我讲解这个程序在底层是怎么运行的?
[打印本页]
作者:
赵方明
时间:
2012-5-10 10:50
标题:
能不能给我讲解这个程序在底层是怎么运行的?
class ArrayTest
{
public static int getMax(int [] arr)
{
int max=arr[0];
for (int x=1;x<arr.length ;x++ )
{
if (arr[x]>max)
max=arr[x];
}
return max;
}
public static void main(String[] args)
{
int [] arr={2,56,8,1,0,36,9};
int Max= getMax(arr);
System.out.println("Max="+Max);
}
}
看到了栈内存和堆内存,糊里糊涂的,谁能讲讲这个程序在底层的运行,调用栈内存和堆内存,还有垃圾回收。
作者:
Zhang_qian
时间:
2012-5-10 11:31
首先当你在主函数里面int [] arr={2,56,8,1,0,36,9};的时候,这时候在栈内存中会产生一个数组变量名
arr,在堆内存中 会产生一片内存区域用来存储arr的值他们分别是arr[0]=2;arr[1]=56;........在堆内存中这片内存的首地址会指向栈内存中的arr,当你在外面调用arr时他就会去堆内存中去找相应的的元素。垃圾回收java虚拟机会帮你自动回收的
作者:
徐然
时间:
2012-5-10 11:57
标题:
ian
本帖最后由 徐然 于 2012-5-10 12:10 编辑
这个如果毕老师画的那个图你看不懂的话,在这里讲解代码运行过程你就更看不懂了
不过可以给你举个例子了解栈和堆,因为你还没看到面向对象,就抛开面向对象不说
你把内存想象成一个特工训练机构
而栈内存就是一张列有每个特工代号的表,表里有很多格子,每个格子里都有一个特工代号
那么堆内存就是特工生活区,有很多房间,每个特工住一个房间,房间有门牌号,他们工作学习都在这房间中
特工一被招进来就,后勤部就在生活区盖一间房子,把这个特工塞进去,在房间门上写上门派号,同时档案管理员就拿着表给他分配代号,把门牌号填到代号后面
有些特工资质低就分配一个代号,有些资质高,分配多个代号
你指派一个任务给某特工,就拿到这个表找到他的代号,然后按后面标示的门牌好到生活区找到他
等他完成任务,就把他的代号从表里划出,当表里再也没有这个特工的代号时,他就成了垃圾
有个专门的部门负责处理掉这些垃圾,并不是一发现就处理,而是不定时处理的
不好意思,美国大片看得有点多。。。。。。
作者:
黄坚声
时间:
2012-5-10 20:45
它在底层调用C/C++来实现数组空间分配,并运算,最后将结果返回给java层。
这个东西,先知道大概了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2