Java和C++的主要区别以及Java垃圾回收机制
2015-08-12 19:23
393 查看
Java和C++的主要区别:
1.指针JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针操作失误,如野指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
2.多重继承
c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。
3.数据类型及类
Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。
4.自动内存管理
Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:
Read r=new Read();
r.work();
语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。而c十十中必须由程序贝释放内存资源,增加了程序设计者的负扔。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。
更多
Java垃圾回收机制
原文作者:Vamei 出处:http://www.cnblogs.com/vamei栈
栈的基本概念参考纸上谈兵: 栈 (stack)。许多语言利用栈数据结构来记录函数调用的次序和相关变量(参考Linux从程序到进程)。在Java中,JVM中的栈记录了线程的方法调用。每个线程拥有一个栈。在某个线程的运行过程中,如果有新的方法调用,那么该线程对应的栈就会增加一个存储单元,即帧(frame)。在frame中,保存有该方法调用的参数、局部变量和返回地址。
Java的参数和局部变量只能是基本类型的变量(比如int),或者对象的引用(reference)。因此,在栈中,只保存有基本类型的变量和对象引用。
引用所指向的对象保存在堆中。(引用可能为Null值,即不指向任何对象)
引用与对象
当被调用方法运行结束时,该方法对应的帧将被删除,参数和局部变量所占据的空间也随之释放。线程回到原方法,继续执行。当所有的栈都清空时,程序也随之运行结束。
堆
如上所述,栈(stack)可以自己照顾自己。但堆必须要小心对待。堆是JVM中一块可自由分配给对象的区域。当我们谈论垃圾回收(garbage collection)时,我们主要回收堆(heap)的空间。Java的普通对象存活在堆中。与栈不同,堆的空间不会随着方法调用结束而清空。因此,在某个方法中创建的对象,可以在方法调用结束之后,继续存在于堆中。这带来的一个问题是,如果我们不断的创建新的对象,内存空间将最终消耗殆尽
垃圾回收等更多内容
相关文章推荐
- C++笔试总结-面试笔试常考题型(二)
- C++怎样跳出双层for循环
- 【C语言经典实例】-使用指针查找数列中的最值
- C++ 控制台版 2048小游戏
- C++ explicit关键字 详解(用于构造函数)
- C与C++区别之处
- c语言const 转为非const的问题
- C++ 对象指针
- C++学习笔记26,虚函数
- C++笔试总结-面试笔试常考题型(一)指针-引用-宏定义-sizeof
- C++对象模型——"无继承"情况下的对象构造(第五章)
- C++对象模型——构造,解构,拷贝语意学(第五章)
- C++易混淆的一点
- 希尔排序(C++版)
- C++文件读取
- C++ sizeof 与 strlen 小结
- HDFS简介及用C语言访问HDFS接口操作实践
- C++ 之 std::nothrow
- 值得推荐的C/C++框架和库 (真的很强大)
- leetcode Valid Palindrome C++&python 题解