我首先想知道为什么一种语言会将所有内容存储在堆上,当它具有严重的性能成本时。例如,Java人员避免创建不必要的对象,因为the performance differences in using primitive types and objects are significant.但我发现像Python和Javascript这样的语言,一切都是对象,它们都是解释的和动态类型的语言。所以我想知道堆是否是这些语言的共同基础。
答案 0 :(得分:1)
是和否。是的,简单的解释器和字节码编译器会将每个对象存储在堆上; CPython就是这么做的。不,存在可以执行escape analysis并将一些堆分配转换为堆栈分配的动态语言的智能实现。
Stalin为Scheme执行此操作,PyPy为Python执行此操作,也许有一个JavaScript实现也会执行此优化。
它们都是解释型和动态类型语言
解释不是语言的一个特征,而是它们的实现,正如Lisp社区几十年前所展示的那样。 Python在其参考实现中被编译为字节码,就像Java一样。