`

Java与C++内存回收机制的差别

阅读更多

大家知道, 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()方法,就要调用该方法。

分享到:
评论

相关推荐

    内存管理 c++ C++内存回收

    C++不同于许多高级语言,如Java或Python,它不提供自动垃圾回收机制,因此程序员需要手动进行内存分配和释放。本文将深入探讨C++中的内存管理,包括内存回收、内存泄漏以及相关的检测工具。 首先,我们要理解C++的...

    c++ 垃圾回收机制

    "垃圾回收机制"这个概念在很多高级语言如Java或Python中是非常常见的一种自动内存管理方式,但在C++中,它并不是标准库的一部分。C++的内存管理主要依赖于程序员手动进行,通过new和delete操作符来分配和释放内存。...

    JAVA与C++的区别

    Java则自动进行内存管理,使用垃圾回收机制处理不再使用的对象。 3. **面向对象特性**: - **继承**:C++支持多重继承,允许一个类有多个父类,而Java只支持单一继承,但通过接口实现多重继承的功能。 - **多态性...

    java高级之垃圾回收机制

    其中,垃圾回收机制(Garbage Collection, GC)是Java虚拟机(JVM)的一项重要特性,它能够自动检测并回收不再使用的对象占用的内存空间,从而有效避免了内存泄漏问题。本文将详细介绍Java中的垃圾回收机制及其工作原理...

    C++实现自动内存回收

    为了解决这些问题,一些高级语言如Java和Python提供了自动内存回收机制,即垃圾回收(Garbage Collection)。在C++中,虽然没有内置的垃圾回收机制,但可以通过特定的设计模式和库来实现类似的功能。 《The Art of ...

    The diffenences bwtween Java and C++ (JAVA与C++区别)

    ### JAVA与C++的区别 #### 摘要 本文旨在对比C++与Java这两种重要的计算机编程语言的特点。从复杂度、语法差异、内存管理等多个方面进行对比分析。 #### 关键词 C++;Java;差异 #### 引言 C++是一种广泛应用...

    java与C++的区别

    如前所述,Java的垃圾回收机制自动处理不再使用的对象,而C++需要程序员通过new和delete来手动分配和释放内存,这可能导致内存泄漏或悬挂指针的问题。 (四)类型系统 Java有严格的类型检查,所有变量必须预先声明其...

    java/c++区别

    Java是从C++的基础上发展而来,继承了C++的一些特性,如继承,但同时也引入了新的概念,如垃圾回收机制,以及更安全的内存管理。 (五) 基本区别 1) **JAVA摒弃的C++内容**:Java不支持指针,以减少内存错误,且没有...

    JAVA与C++简介

    JAVA不直接允许程序员操控指针,而是通过自动的内存管理机制,比如垃圾回收(Garbage Collection),来避免C++中因指针误用导致的系统崩溃。这种设计提高了JAVA程序的安全性和稳定性,但也意味着JAVA程序员失去了对...

    Java转C++代码工具 J2C

    例如,Java的接口在C++中可能表现为抽象类,Java的动态绑定在C++中需要手动实现,而垃圾回收机制则需要转换为手动内存管理。 使用J2C需要注意的是,虽然可以实现代码的转换,但转换后的C++代码可能需要进一步优化和...

    C内存管理内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题

    C++不提供自动内存回收机制,程序员必须确保在不再需要某块内存时及时释放。在某些情况下,如异常处理,需要特别注意内存清理,以防止在异常传播过程中出现未释放的内存。 总的来说,掌握C++的内存管理是提升编程...

    java内存机制及异常处理

    为了优化内存管理,Java采用了垃圾回收机制(Garbage Collection),自动回收不再使用的对象,以避免内存泄漏。 2. **Method Area(方法区)**:又称为非堆区或永久代,在这里存储的是类和接口的元数据,包括类的...

    Java垃圾回收机制

    ### Java垃圾回收机制详解 ...Java的垃圾回收机制是其强大之处之一,它不仅简化了内存管理,还提高了程序的安全性和稳定性。通过对不同垃圾收集算法的理解,我们可以更好地设计和优化Java应用,以满足各种性能需求。

    Java与C 垃圾回收机制剖析.pdf

    Java和C++是两种广泛应用的面向对象编程语言,它们在垃圾回收机制上有着显著的差异。垃圾回收机制是自动管理程序内存的一种方式,主要目的是自动识别并释放不再使用的内存空间,防止内存泄漏。 C++语言的设计哲学...

    Java与C/C++的区别(转).

    Java采用了自动垃圾回收机制来管理内存,这意味着程序员无需手动释放不再使用的对象。垃圾回收器会在适当的时候自动检测并清理不再被引用的对象,大大减少了因内存泄露导致的程序崩溃等问题。相比之下,C/C++中的...

    C++代码转java工具

    5. **内存管理**:C++使用手动内存管理,而Java有自动垃圾回收,工具需要处理这两者之间的差异。 6. **函数调用和库集成**:如果C++代码使用了库,工具可能需要处理库的迁移问题,或者提供Java的等价实现。 标签...

    JAVA和C++的区别

    JAVA 使用垃圾回收机制来自动清理不再使用的内存,避免了C++中因指针管理不当导致的内存泄漏或系统崩溃问题。这种设计提高了程序的稳定性和安全性,但也可能在某些情况下影响程序性能。 其次,C++支持多重继承,...

    C++转换JAVA工具

    这个过程可能涉及到一些挑战,比如C++的模板、指针和运算符重载在Java中的映射,以及Java特有的垃圾回收机制与C++手动内存管理的差异。工具需要确保转换后的代码不仅语法正确,而且能保持原有的功能和性能。 安装...

Global site tag (gtag.js) - Google Analytics