java 内存管理机制_java的内存管理机制

1、内存区域的分类

栈内存:基本类型变量和对象的引用,优势在于存取速度快

堆内存:new创建的对象和数组以及对象的实例化变量,优势在于动态分配内存,但是存取速度相对较慢

2、不同类型的内存分配

(1)基本数据类型:类似int,char,double之类的数据类型

当使用int a;来定义的时候,会在栈空间分配一个空间来存a(此时为空);当使用int a=2;来定义的时候,会在栈空间分配一个空间来存a,同时去找有没有值为2的内存空间,如果有就把a的地址空间指向2的地址空间,如果没有就创建值为2的地址空间,把a的地址空间指向那个地址空间。

(2)对象

对对象的内存分配主要是在栈空间存放对象的地址(对应的堆空间的地址),在堆空间存放对象

(3)String

String其实就是一个类,但是有比较特殊的地方。

String s = new String(“Hello,World!”); 和 String s = “Hello,World!”; 是不一样的:

前者和普通类是一样的,后者与基本类型类似,会先去找有没有”Hello,World!”,如果没有才会去创建一个值为”Hello,World!”的对象,然后栈空间存放这个对象的在堆中的地址(记这个栈空间的地址为X,X不是对象在堆中的地址),s在栈空间的值是X。

(4)数组

栈中存放数组在堆中的首地址,堆中分配数组。

(5)方法调用时的内存分配

实例变量和对象在堆中,局部变量在栈中(方法执行完成之后就会被回收)

3、垃圾回收机制

(1)方式

JVM自己回收或者是system.gc();请求回收。

(2)对象

1)空引用:String s = null;此时s就会被回收

2)没有引用:String s = “a”;s = “b”;那么a就变成“无主孤魂”就会被回收

3)过期:方法运行完成后,方法中的局部变量就会被回收

4)互相引用:对象A引用了对象B,B直接或者间接引用了对象A,而且A和B都不被其他对象所引用,这样也会被回收

(3)垃圾回收算法

http://speed847.iteye.com/blog/373278

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值