当前位置:首页 > 开发 > 编程语言 > C/C++ > 正文

Java面试十问之三:Java与C++内存回收机制的差别

发表于: 2015-06-17   作者:HNUlanwei   来源:转载   浏览:
摘要: 大家知道, Java 除了那 8 种基本类型以外,其他都是对象类型(又称为引用类型)的数据。 JVM 会把程序创建的对象存放在堆空间中,那什么又是堆空间呢?其实,堆( Heap)是一个运行时的数据存储区,从它可以分配大小各异的空间。一般,运行时的数据存储区有堆( Heap)和堆栈( Stack),所以要先看它们里面可以分配哪些类型的对象实体,然后才知道如何均衡使用这两种存储区。一般来说,栈中存放的

大家知道, Java 除了那 8 种基本类型以外,其他都是对象类型(又称为引用类型)的数据。 JVM 会把程序创建的对象存放在堆空间中,那什么又是堆空间呢?其实,堆( Heap)是一个运行时的数据存储区,从它可以分配大小各异的空间。一般,运行时的数据存储区有堆( Heap)和堆栈( Stack),所以要先看它们里面可以分配哪些类型的对象实体,然后才知道如何均衡使用这两种存储区。一般来说,栈中存放的是非 static 的自动变量、函数参数、表达式的临时结果和函数返回值(如果他们没有被放到寄存器中)。栈中的这些实体数据的分配和释放均是由系统自动完成的,堆中存放的实体数据都是程序中显式分配的,没有自动垃圾回收机制的系统中必须由程序代码显式地释放这些实体。堆的管理,不同的语言实现是不同的。如 C 语言就没有把堆的分配和释放做到语言的层次,它对堆空间对象的操作是通过其库函数 malloc()和 free()来实现的;而 C++直接把对堆空间中的对象的分配和释放做到语言层次了。使用 new 和 delete 语句, Java 就做得更彻底,应用开发者只要在需要用堆分配的时候创建就行了,何时释放如何释放,都有 Java 虚机( JVM)来做,而不需要程序代码来显式地释放。

注;大多数 JVM都实现了自动垃圾回收机制,只是它们各自的实现算法不同。

 

JVM 有着各种版本的实现,它们基本上都会有垃圾回收的机制,也就是堆内存的管理的自动进行。那么,又该如何知道对象已经被回收了呢? Java 中根父类 java.lang.Object 中有个 finalize()方法,它会在垃圾回收器认为这个对象是垃圾的之后,真正回收之前被调用。因为所有的类都继承自 Object,所以它们都会有 finalize()方法。程序员可以在这个方法中写一些需要在对象被回收前做的事情,例如关闭数据库连接


finalize()方法原型如下:

protected void finalize() throws Throwable
一般在调用这个方法之前,垃圾回收器能检测出不再被引用的对象,如果这些对象
盖了 finalize()方法,就要调用该方法。

Java面试十问之三:Java与C++内存回收机制的差别

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
来源 小学徒的成长历程 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存
在JAVA中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是
【转自】 http://www.admin10000.com/document/1671.html 在Java中,它的内存管理包括两方面:内存分
转自 http://www.cnblogs.com/xiaoxuetu/archive/2013/03/29/2987805.html 在Java中,它的内存管理
转自 http://www.cnblogs.com/xiaoxuetu/archive/2013/03/29/2987805.html 在Java中,它的内存管理
转载地址:http://blog.jobbole.com/37273/ 在Java中,它的内存管理包括两方面:内存分配(创建Java
Java的内存回收机制   在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存
之前看过几次的内存回收机制,总是感觉有些模糊,所以在这里总结一下,以便日后查询。 此处将引用《
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号