A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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);

}

}
看到了栈内存和堆内存,糊里糊涂的,谁能讲讲这个程序在底层的运行,调用栈内存和堆内存,还有垃圾回收。

3 个回复

正序浏览
它在底层调用C/C++来实现数组空间分配,并运算,最后将结果返回给java层。
这个东西,先知道大概了。
回复 使用道具 举报

ian

本帖最后由 徐然 于 2012-5-10 12:10 编辑

这个如果毕老师画的那个图你看不懂的话,在这里讲解代码运行过程你就更看不懂了
不过可以给你举个例子了解栈和堆,因为你还没看到面向对象,就抛开面向对象不说
你把内存想象成一个特工训练机构
而栈内存就是一张列有每个特工代号的表,表里有很多格子,每个格子里都有一个特工代号
那么堆内存就是特工生活区,有很多房间,每个特工住一个房间,房间有门牌号,他们工作学习都在这房间中
特工一被招进来就,后勤部就在生活区盖一间房子,把这个特工塞进去,在房间门上写上门派号,同时档案管理员就拿着表给他分配代号,把门牌号填到代号后面
有些特工资质低就分配一个代号,有些资质高,分配多个代号
你指派一个任务给某特工,就拿到这个表找到他的代号,然后按后面标示的门牌好到生活区找到他
等他完成任务,就把他的代号从表里划出,当表里再也没有这个特工的代号时,他就成了垃圾
有个专门的部门负责处理掉这些垃圾,并不是一发现就处理,而是不定时处理的


不好意思,美国大片看得有点多。。。。。。

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先当你在主函数里面int [] arr={2,56,8,1,0,36,9};的时候,这时候在栈内存中会产生一个数组变量名
arr,在堆内存中 会产生一片内存区域用来存储arr的值他们分别是arr[0]=2;arr[1]=56;........在堆内存中这片内存的首地址会指向栈内存中的arr,当你在外面调用arr时他就会去堆内存中去找相应的的元素。垃圾回收java虚拟机会帮你自动回收的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马