繁体   English   中英

Java从堆执行与从C / C ++堆栈执行有何不同?

[英]How does Java execution from heap differ from execution from c / c++ stack?

在c / c ++中,本地对象是在堆栈上创建的,数据从堆栈馈送到cpu寄存器。

在Java中没有堆栈,所有对象都分配在堆上,现在对于预编写的代码,可以计算出对象所需的大小,而不必为每个对象堆分配使用过分的c c ++样式,一次放置整个代码块。 这样,Java的堆性能几乎与c c ++中的堆栈性能一样好,几乎可以媲美。

我的问题是程序如何从堆流到最终被执行?

假设我运行了一个函数,该程序将程序代码复制到内存中,然后将其放入堆内存中,并返回程序入口点地址,我如何启动其执行?

在Java中存在堆栈。 仅仅因为在堆上分配了对象并不意味着没有堆栈。 执行不会在堆上发生,执行是将方法调用添加到堆栈中或从堆栈中解开,就像C / C ++的执行流程一样。

在Java中没有堆栈

当然有一个堆栈。
当然,当您执行new时,对象将分配给堆。
但是参考变量(例如,如果它是局部变量)则位于堆栈上。
堆栈也用于功能参数(功能框架)。

如果您谈到堆的性能,那么对于Java而言,这意味着其垃圾回收器(GC)的性能,这取决于其JIT(即时)编译器-一种将JVM字节码动态转换为机器代码的编译器。

GC可以非常有效。 阅读一本好的垃圾收集手册 ,还可以找到Andrew's Appel的旧论文《 垃圾收集》比堆栈分配更快

精心设计的GC-与精心设计的JIT-可以真正快速地分配事务。 世代复制的GC将花费少量时间在年轻的活物上(因此,已死亡的年轻物实质上是免费的“大量”分配)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM