java内存分析

JavaSE知识总结


2.内存分析

分析内存是深入理解编程的第一步,一下给大家介绍一下java中常见的内存分析,文章的主要脉络:

数据类型

数据类型在上一期也给大家介绍了一下,这一次主要介绍的是各个数据在内存中的存在状态和位置,数据类型的不同,内存分配的位置和大小也会有不同,

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

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

我们编写的代码在内存中的存在情况,直接上一张比较直观便于理解的图:

由图中我们可以看出执行步骤:

  1. 从硬盘中提取代码加入内存当中。
  2. 代码存放在代码段;局部变量和基本数据类型存放于栈;引用类型存放于堆中;静态变量、字符串存放于数据段。

内存分析

一维数组

一维数组的初始化

int []a;
a=new int[5];

先在栈内存中声明了a;

然后将a指向堆内存的值

如果数组类型是引用类型

public class Test{  
    public static void main(String args[]){  
        Date []days;  
        days=new Date[3];  
        for (int i=0;i<3;i++){  
            days[i]=new Date(2004,4,i+1);  
        }  
    }  
}  
class Date{  
    int year;int month;int day;  
    Date(int y;int m;int d){  
        year=y;  
        month=m;  
        day=d;  
    }  
}  

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

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

二维数组

二维数组可以看成以数组为元素的数组

内存回收

栈里面的内存,函数执行完后消失,而堆里面的内存,需要垃圾回收机制回收,不一定马上消失。 实参与局部变量同等对待;函数返回值也会在栈里面临时存放,函数就执行完也就会删除,调用完毕后内存回收,但是只分配空间,没有名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值