在java中,动态分配

时间:2016-09-03 17:31:28

标签: java c compilation jvm

在C中,编译器在编译期间分配内存,但在Java中,JVM在运行时分配内存。因此,当C编译器在编译之后分配内存时,ram被清除,但是在运行时如何存储数据?

2 个答案:

答案 0 :(得分:3)

这里有一些误解:

  

因此,当编译器在编译后分配内存时,ram被清除

编译器不为程序分配内存;程序启动时分配内存。基本上编译器只是告诉JVM如何在运行时为所述程序分配内存。

  

然后在运行时如何存储数据?

数据存储在JVM解释器中,JVM解释器本身就是一个程序。它有一个存储程序(而不是编译器)分配的内存数据的地方。

答案 1 :(得分:3)

编译器无法分配内存 - 当然它不能。这取决于运行时环境。首先,没有什么能保证编译代码的机器是代码实际运行的机器。

C和Java在这方面的主要区别在于C要求你管理你的内存{de,}分配; Java没有这样的问题,虽然它确实带来了一些缺点。除了其他事项外,还要了解Java中的自动释放 - 虽然不在您的控制之下

基本上,在C语言中,如果你不能malloc(),则会获得NULL,因此您“只”需要检查并采取相应措施;在Java中,你得到一个很难恢复的OutOfMemoryError

这是两种截然不同的方法,为了便于使用,无论好坏,今天越来越多的语言采用“Java方式”而不是“C方式”。

但无论如何,这根本与编译器无关。