内存分析

在java中new出来的事物都放在堆内存中。

引用类型相当于指针。基础类型在内存分配的时候占1块内存,引用类型在内存分配的时候占2块内存。

栈、堆、常量池、代码区、静态区

1,基础数据类型直接在栈空间stack分配,方法的形参,直接在栈空间分配,当方法调用完成后从栈空间回收

  2 引用数据类型,需要用new来创建,既唉栈空间分配一个地址空间,又在堆空间heap分配对象的类变量。

  3.方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后,从栈空间回收。

  4.局部变量new出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。

  5 方法电泳时传入的基本数据类型(literal)参数,现在栈空间分配,在方法调用完成后从栈空间clear。

  6.字符串常量在data segment区域分配,static在datasegment区域分配,

  7.This在堆空间分配

  8.数组既在栈空间非配数组名称,又在堆空间分配数组实际的大小。

 

 

内存分析:

局部变量永远在栈里;new出来的东西以及C语言中的成员方法所占内存永远在堆里;静态的东西和(字符串常量)永远在数据区;剩下的代码在指定的代码区。

例如:成员变量,当你new出来一个类的时候才会去将类中的成员变量调出来,所以成员变量应该放在堆里。

 

 

实例精讲:

内存总体分为了4个部分,包括 stack segment(栈内存) 、heap segment(堆内存)、codesegment(代码区) 、data segment(数据区)。

1、         其中我们程序中用关键字new出来的东西都是存放在heapsegment(堆内存);

2、         程序中的局部变量存放在stack segment(栈内存),这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收机制来处理);方法调用完后,为方法分配的所有的局部变量自动消失。

3、         程序中的方法,是内存中的code segment(代码区)中的,而且是多个对象 共享一个代码空间区域;

4、         static静态变量,需要放在内存中的data segment中,

 

  下面是一个例子程序的内存分析

 下面是内存空间分配的过程

 

  第二步执行过程

 

这是整个main方法执行过程中的内存空间分配,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值