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

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

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

那请问,在c++中对内存的管理分为三种:
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

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

(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
-------------------------------------------------------
那么在java中是怎样管理的呢?全是以堆的形式动态分配,java的虚拟机到底是怎样的原理?我真的有些不懂,请多多指教。

老大,帮帮忙啊!!我自己顶!!!!!!!!!!!!!!!

Java都是在堆上分配内存。

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

新分配的对象
已经分配并对多次使用的对象
永远存在的对象(例如:Class)

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

Almoust the same as c++.
The only difference is that java supports gabarge collection to clean up memory in heap, but c++ programmers should deallocate memory in heap by himself through delete or free.

The JVM spec
http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html#1732

l0190269454,多谢你了!!

客气,客气!