码迷,mamicode.com
首页 > 其他好文 > 详细

数据区、代码区、栈区、堆区

时间:2015-01-04 11:28:09      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

 

 简介

 1.栈区(stack):由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。

 2.堆区(heap):由程序员决定,在Java中,如果程序员不释放的话,一般会由垃圾回收机制自动的清理掉。此区域主要用来存放我们经常创建的对象、动态的申请的临时空间等。

 3.数据区(data seg):也称全局区或者静态区,根据名称我们就应该知道用来存放一些全局的东西,比如我们经常用到的静态变量、全局变量等都会存放到数据区,此区域上的东西都被全局所共享。比如我们可以采取类名.的方式就可以访问到方法,这就是所谓的静态方法,存放到数据区的。

 4.代码区:存放程序编译后可以执行代码的地方。比如执行代码时写的While语句、if条件语句等,都会存放到此。


 内存分析

 有了以上的分析基础,下面来一个简单的内存分析,先看一下示例代码

 实例代码

 

<span style="font-family:SimSun;font-size:18px;"> /// <summary>
    /// Person类
    /// </summary>
    class Person
    {
       //变量
        int id;
        int age = 20;
        Person(int _id, int _age)
        {
            id = _id;
            age = _age;
        }
    }</span>


  分析

  上面就是简单的定义了一个Person类,然后写了一个简单的构造函数,来为变量初始化值,下面来执行一下,看一下内存中的分布图

  执行语句:Person tom = new Person(1,25);


  第一步:

   我们知道每一个类都有一个默认的构造函数,即Person(),因此上述会先调用默认的构造函数

   技术分享

  第二步:执行构造函数New Person(1,25)时,我们知道调用的是Person(int _id, int _age),所以此时栈空间会分配方法的参数的临时变量如下

    技术分享

   第三步:执行构造函数 Person(int _id, int _age),id = _id; age = _age;此时栈中的临时变量会改变默认构造函数创建的对象,赋值完后,栈中的临时变量会自动的销毁,然后创建的临时变量Tom会自动的指向创建的对象。

技术分享

   
        以上就是整个流程的执行过程!
            
           
      

   



数据区、代码区、栈区、堆区

标签:

原文地址:http://blog.csdn.net/luckyzhoustar/article/details/42386629

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!