1

我首先想知道为什么一种语言会在性能成本很高的情况下将所有内容存储在堆上。例如,Java 人员避免创建不必要的对象,因为使用原始类型和对象的性能差异很大。但我发现像PythonJavascript这样的语言,一切都是对象,它们都是解释型语言和动态类型语言。所以我想知道堆是否是这些语言的共同点。

4

1 回答 1

1

是和不是。是的,简单的解释器和字节码编译器会将每个对象存储在堆上;CPython 就是这样做的。不,存在可以进行逃逸分析并将一些堆分配转换为堆栈分配的动态语言的智能实现。

斯大林为 Scheme 执行此操作,PyPy为 Python 执行此操作,也许还有一个 JavaScript 实现也可以执行此优化。

它们都是解释型和动态类型的语言

正如 Lisp 社区几十年前所展示的那样,解释不是语言的特征,而是其实现的特征。Python 在其参考实现中被编译为字节码,就像 Java 一样。

于 2013-05-29T09:02:43.557 回答