JAVA的内存分配策略和自动垃圾回收机制

JAVA和C++之间有一堵由内存分配和垃圾收集技术所围成的高墙,墙外的人想将来,墙里面的人想出来。

对于从事C 和C++ 程序开发的开发人员来说 在内存管理领域 他们既是拥有最高权力的皇帝 又是从事最基础工作的劳动人民—既拥有每一个对象的 所有权又担负着每一个对象生命开始到终结的维护责任。 
对于Java 程序员来说 在虚拟机的自动内存管理机制的帮助下 不再需要为每一个new 操作去写配对的delete/free 代码 而且不容易出现内存泄漏和内存溢出问题看起来由虚拟机管理内存一切都很美好 不过 也正是因为Java 程序员把内存控制的权力交给了Java 虚拟机 一旦出现内存泄漏和溢出方面的问题 如果不了解虚拟机是怎样使用内存的那排查错误将会成为一项异常艰难的工作 

——周志明《深入理解Java虚拟机》

一、内存分配策略
一般内存粗糙的可以分为两块,堆heap空间和栈stack空间。但其实Java内存远比这个复杂,只是堆和栈是最重要的两块。
其中栈,也成为局部变量表,主要存储的是在非static的自动变量、函数参数、表达式的临时结果金额函数返回值。栈是线程私有的,生命周期与线程相同。
而堆heap是内存中最大的一块,为线程共享,JVM启动时创建。主要用于存放new出来的对象以及数组。而JAVA的垃圾回收机制管理的往往也就是这个堆内存,因此也称为GC(Garbage Collection Heap)堆。
此外还有方法区和常量池等内存区域。
二、自动垃圾回收机制
对于堆的管理,不同的语言实现方式是不同的。其中C语言是通过库函数malloc()和free()来实现。而C++直接将对堆空间中对象的操作和分配释放到语言层次,使用new和delete语句。而Java只需要开发人员在需要时候创建就可以了,何时释放都由JVM来控制。而在Java的Object类中有一个finalize()方法,在垃圾回收器真正回收之前调用。
Java的垃圾回收机制最为Java语言的一大特性,将Java堆空间内存的释放交给JVM自动处理,无须开发人员在程序中显示调用,从而避免了因为开发人员忘记释放内存而造成的内存溢出。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值