Loading... Java的非基本类型只能在堆中申请内存,并且由垃圾收集器管理其生命周期。不需要程序员控制其生命周期。 C++的非基本类型可以在堆中申请内存,然后由程序员控制其生命周期(手动调用析构函数delete)。也可以在栈中申请内存,由程序栈控制其生命周期,非基本类型对象的生命周期与当前程序栈相同,程序栈空时,会自动调用对象的析构函数。 为何Java鼓励在堆中申请内存呢? 为何c++在堆中申请内存如此普遍呢?在栈中不是更方便吗? 原因很简单,在栈中的对象生命周期太短了!,自动是自动了,但是不方便外传啊,如果需要将这个对象外传呢?那么就麻烦了,如果是在栈中申请内存的对象。在把对象作为返回值时会面临多次拷贝的问题,即使编译器优化,也至少会有一次拷贝过程,降低了性能,而如果采用堆中申请对象内存,返回对象地址则不必硬拷贝大对象。 当然了,在复杂情况下,由栈自动控制生命周期不会造成内存泄露,是很好的。如果手动申请内存就可能造成内存泄露,Java于是造就了垃圾收集器来管理在堆中的对象的生命周期。 总结就是,在堆中或在栈中都有好处和坏处,Java为了简单起见,将非基本类型都统一在堆中申请内存,并且将生命周期的管理交给统一的垃圾收集器管理。 最后修改:2020 年 07 月 11 日 10 : 37 AM © 允许规范转载