在C中,编译器在编译期间分配内存,但在Java中,JVM在运行时分配内存。因此,当C编译器在编译之后分配内存时,ram被清除,但是在运行时如何存储数据?
答案 0 :(得分:3)
这里有一些误解:
因此,当编译器在编译后分配内存时,ram被清除
编译器不为程序分配内存;程序启动时分配内存。基本上编译器只是告诉JVM如何在运行时为所述程序分配内存。
然后在运行时如何存储数据?
数据存储在JVM解释器中,JVM解释器本身就是一个程序。它有一个存储程序(而不是编译器)分配的内存数据的地方。
答案 1 :(得分:3)
编译器无法分配内存 - 当然它不能。这取决于运行时环境。首先,没有什么能保证编译代码的机器是代码实际运行的机器。
C和Java在这方面的主要区别在于C要求你管理你的内存{de,}分配; Java没有这样的问题,虽然它确实带来了一些缺点。除了其他事项外,还要了解Java中的自动释放 - 虽然不在您的控制之下。
基本上,在C语言中,如果你不能malloc()
,则会获得NULL
,因此您“只”需要检查并采取相应措施;在Java中,你得到一个很难恢复的OutOfMemoryError
。
这是两种截然不同的方法,为了便于使用,无论好坏,今天越来越多的语言采用“Java方式”而不是“C方式”。
但无论如何,这根本与编译器无关。