首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java中的内存储器分析

2012-10-18 
Java中的内存分析分析内存是深入了解编程的第一步,以下来演示一下编程中常见的内存分析,文章脉络:数据类型

Java中的内存分析

    分析内存是深入了解编程的第一步,以下来演示一下编程中常见的内存分析,文章脉络:

    Java中的内存储器分析

    数据类型

    数据类型不同,内存分配位置和大小也不同,用一张图表示Java中的数据类型。除了基本数据类型,其它全部是引用类型

    Java中的内存储器分析

    局部变量:方法体内声明的变量,包括形参都是局部变量方法体外。

    成员变量:类内声明的变量为成员变量。

    布局

    以下一张图可以清楚的展示代码从提取到运行的的位置。

    Java中的内存储器分析

    由图可以看出,执行步骤:

    1、从硬盘中提取代码到内存中。

    2、代码存放在代码段;局部变量和基本数据类型存放于栈;引用类型存放于堆中;静态变量、字符串存放于数据段。

      一维数组

      例如一维数组的初始化


      在内存中是s指向了堆内的值:

      Java中的内存储器分析

      如果数组的项是引用类型,如下

      执行Date [] days;在栈中给days分配空间:

      Java中的内存储器分析

       执行days= new Date[3];在堆中给days分配三个位置,内容为空,days指向这三个位置:

      Java中的内存储器分析

      执行循环后,每个days项再指向堆中分配的时间位置:

      Java中的内存储器分析

      二维数组

      二维数组可以看成以数组为元素的数组。例如:

        int a[][]={{1,2},{3,4,5,6},{7,8,9}};

      Java中的内存储器分析

       

      内存回收

      栈里面的内存,函数执行完后消失,而堆里面的内存,需要垃圾回收机制回收,不一定马上消失。

      实参与局部变量同等对待;函数返回值也会在栈里面临时存放,函数就执行完也就会删除,调用完毕后内存回收,但是只分配空间,没有名字。

      构造函数

      在栈中分配一个空间为tom,用于new出对象:

      Java中的内存储器分析

      构造函数中的值也放到栈中:

      Java中的内存储器分析执行new时

      把栈中的值赋给堆中new出来的tom对象:

      Java中的内存储器分析

      执行完毕后,方法中的局部变量在栈中所占空间被收回。


      this指针

      我们都知道this指向的是对象本身,以下这张图可以形象的看出,this是如何指向自身:

      Java中的内存储器分析

      static变量

      静态变量,分配空间时,位于的是数据段,而并非堆和栈中。

      Java中的内存储器分析

      super关键字

      继承

      实现接口内存分析

      New出来的Student("le"),应该有sing();sleep();study();getName(),但是由于定义的是Singer S1,所以s1只能访问New出来的Student中的sing和sleep方法。

      Java中的内存储器分析

      以前看设计模式,对Interface xx=new Object();及类似的语句理解非常模糊,类似这样的问题内存分析可以更直观的展示出其原理。本文简单介绍了函数、类、对象的内存分析,掌握这些可以更深刻的掌握面向对象常见的继承、实现、构造、多态等。


热点排行