java 和c++在编译和运行上有什么区别?

04-03-10 zjwyp1980
java 和c++在编译和运行上有什么区别,还有java能不能像c++一样使用动态分配空间的方式即:new\

谢谢了!!

    

l0190269454
2004-03-11 08:32
现在的Java是运行时编译。和C++的编译方式完全不同。所有的对象都是动态分配内存的,而且Java的优点在于你不用delete,内存撤销由虚拟机负责

zjwyp1980
2004-03-11 08:50
那请问,在c++中对内存的管理分为三种:

(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

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

那么在java中是怎样管理的呢?全是以堆的形式动态分配,java的虚拟机到底是怎样的原理?我真的有些不懂,请多多指教。

zjwyp1980
2004-03-11 13:12
老大,帮帮忙啊!!我自己顶!!!!!!!!!!!!!!!

l0190269454
2004-03-11 13:50
Java都是在堆上分配内存。

各个厂家的虚拟机策略不同。Sun的虚拟机把它可以支配的内存分成三个部分,分别存放;

新分配的对象

已经分配并对多次使用的对象

永远存在的对象(例如:Class)

各个分区使用不同的内存回收策略

猜你喜欢
2Go 1 2 下一页