C\C++和Java 的区别(特别是在内存分配方面)

 前言:今天当被问到有关C与Java之间在内存管理方面的不同是什么,瞬间 T_T__,所以特意集众人之解,存入自己的学习笔记中,加以学习和巩固。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Java和C都是指令式语言,

不同的是:

(1)Java有面向对象(OO,Object Oritended)成分在里面,而C是完全面向过程的,C的高级版本C++、C#支持面向对象。

(2)Java中采用在某个类中定义一种公用静态的变量来完成定义全局变量的功能;而不是在所有类之外定义全局变量。

(3)Java不支持头文件;而C和C++语言中都是用头文件来定义类的原型、全局变量、库函数等。

(4)Java不支持宏定义,而是使用关键字final来定义变量;而C++在采用宏定义来实现常量定义。

(5)Java中不包含结构和联合,所有内容都封装在类里面;而C和C++中结构和联合的所有成员均为公用,这就带来了安全性问题。

(6)Java中不再使用指针,既省略了指针,每个指向对象的变量其实都是指针;而指针在C和C++中却是最灵活、最易出错的数据类型。

(7)Java跨平台,既不同的操作系统都可以通过JVM(Java Virtual Machine(Java虚拟机))来解释Java程序,而C、C++、C#则是与平台(CPU+OS+Compiler)相关的,有些指令只在某些操作系统中才能执行。原因是:Java是解释型语言,所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行,而C是编译式语言,代码要先通过编译器转换成与系统相关的中间代码,然后才能运行。也可以理解为Java中,int类型总是32位的,而在C和C++中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在16位的操作系统(16位的寄存器,16位的编译器)下,为2个字节既16位;在32位的操作系统(32位的寄存器、32位的编译器)下,为4个字节既32位。这使得C语言造成不可移植性,而Java具有跨平台性。

(8)Java不支持系统调用,既无法与操作系统进行交互,这是由它的跨平台的特点决定的,而C则可以调用系统中的指令,如fork()。这也是为何Java中只有线程(Thread)概念而没有进程(Process)概念,而C两者都有。

(9)在内存分配方面
         Java中对内存的分配是动态的,采用面向对象的机制,用运算符new为每个对象分配内存空间。然而Java无法对内存进行控制,也可以说实际内存会随着程序运行情况而改变。在程序运行中,每个Java系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行收集(采用Gabbage Collection机制),使得系统资源得到更充分地利用。按照这种机制,程序员不必关注内存管理问题,使得Java程序得编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。而另外两个都是通过指针对内存进行人为分配的:C语言通过malloc()和free()这两个库函数来分别实现分配内在和释放内存空间;C++语言则是通过运算符new()和delete()来分配和释放内存。在C和C++的这种机制中,程序员必须非常仔细地处理内存的使用问题。一方面,如果对已释放的内存或者是未曾分配的内存做释放,都会造成死机;另一方面,若是对长期不用的或是不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭。


。。。。。。


非常感谢以下贡献者:




同时也十分感谢以下扩展学习贡献者:

“C与C++动态分配,释放内存的区别”:http://wudikua123.iteye.com/blog/1517590
“32位和64位系统区别及int字节数 ” : http://blog.csdn.net/zhongzhiwei/article/details/8678885

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言和Java语言有一些显著的区别。C语言是一种结构化的、面向过程的语言,而Java是一种面向对象的语言。在C语言中,程序是由函数和语句构成的,而在Java中,程序是由对象和类构成的。C语言更侧重于算法,而Java更侧重于设计和构建软件系统的稳定性、可移植性和可扩展性。 ### 回答2: C和Java是两种不同的编程语言,有着一些明显的区别。 首先,C是一种过程式编程语言,而Java是一种面向对象编程语言。在C中,程序由一系列相继执行的语句组成,而Java中的程序由对象和对象之间的交互组成。 其次,C是一种编译型语言,Java是一种解释型语言。在编写C程序后,需要通过编译器将其转换成机器可执行的二进制代码,然后才能运行。而Java程序在运行时由Java虚拟机(JVM)解释执行。这意味着Java程序可以在不同的平台上运行,而C程序需要在每个平台上重新编译。 此外,C语言的语法相对较简洁,更接近底层硬件操作,可直接访问内存和硬件,对于编写低级别的系统程序和性能要求较高的应用程序来说非常适用。而Java则更注重跨平台的可移植性和安全性,提供了自动内存管理和垃圾回收机制,使得程序员可以更专注于高级别的问题和业务逻辑。 另外,C具有更广泛的应用领域,包括操作系统、驱动程序、嵌入式系统等,而Java在企业级应用开发、网页开发和移动应用开发等方面更为常见。 总的来说,C和Java在语法、执行方式和应用领域上都有明显的区别。选择使用哪种语言,取决于具体的开发需求和目标。 ### 回答3: C和Java是两种不同的编程语言,它们在一些方面有很大的区别。 首先,C是一种底层语言,也被称为编译型语言,它更接近于计算机硬件和操作系统。它提供了对计算机内存和硬件的直接访问,因此在性能和效率方面非常强大。C语言适用于系统级编程、操作系统和嵌入式系统开发等领域。 而Java则是一种高级语言,也被称为解释型语言。Java代码首先被编译为中间字节码,然后由Java虚拟机(JVM)解释和执行。相比C语言,Java更注重面向对象编程,提供了很多封装好的类和库以便于开发者使用。Java跨平台特性使得Java程序可以在不同的操作系统上运行,具有很好的可移植性。 其次,C语言对于内存管理较为自由,程序员需要手动分配和释放内存,这要求开发者具备一定的内存管理技巧。而Java采用了自动内存管理机制,即垃圾回收器自动释放不再使用的内存,减轻了开发者的负担,但也可能导致一些性能上的损失。 此外,C语言的语法相对简单,更加灵活,但也容易出现指针错误和内存泄漏等问题。Java的语法更加严格和规范,更强调面向对象的思想,提供了封装、继承、多态等特性,有助于提高代码的可读性和可维护性。 总的来说,C语言适合需要高性能和对底层细节有较深了解的开发者,而Java更适合构建大型软件系统和跨平台应用。具体选择语言应该根据项目需求、开发者的技术背景和偏好来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值