在c / c ++中,在堆栈上创建本地对象,并将数据从堆栈馈送到cpu寄存器。
在Java中没有堆栈,所有对象都在堆上分配,现在对于预先编写的代码,可以计算对象所需的大小,而不是每个对象堆积分配过度c c ++样式整个代码块被放置马上下来。这样,Java的堆性能几乎与c c ++中的堆栈性能相当,几乎相当。
我的问题是程序如何从堆流到最终执行?
让我们假设我运行一个将程序代码复制到内存中的函数,在程序进入堆内存后,返回程序入口点地址,如何启动它的执行?
答案 0 :(得分:5)
在Java中,是堆栈。仅仅因为在堆上分配对象并不意味着没有堆栈。执行不会发生在堆上,执行是从堆栈中添加和退出的方法调用,就像C / C ++的执行流程一样。
答案 1 :(得分:4)
在Java中没有堆栈
当然有一堆
当你执行new
时,对象被分配给堆
但是参考变量例如是如果它是局部变量,则它位于堆栈上
堆栈也用于功能参数(功能框架)。
答案 2 :(得分:0)
如果你谈到堆的性能,它意味着Java的垃圾收集器(GC)的性能,它依赖于它的JIT(即时)编译器 - 一个动态地将JVM字节代码转换为机器代码的编译器。
GC可以非常高效。阅读一篇好文章garbage collection handbook,以及安德鲁的Appel旧文章Garbage Collection can be faster than stack allocation
精心设计的GC - 配合良好的JIT-可以非常快速地分配东西。世代复制GC将花费少量时间用于年轻的活体对象(因此死亡的年轻物体基本上是分配的,并且是#34;免费的#34;