javase内存管理与scala内存管理

wfauudbj  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(408)

我对执行java程序时内存中发生的事情很好奇,所以我看了一些简短的教程,只是为了有一个基本的了解。
这些“教程”讨论的是堆和堆栈,以及它们的工作原理和用途。
JavaSE作为一种oop语言被定义为有状态的,这意味着变量随时间的变化而变化(例如x=x+1)。
考虑到变量“散布”在堆和堆栈上,我可以理解为什么java是有状态的,为什么我们会陷入并发问题。
然而,函数式编程语言似乎不会受到这些问题的影响,因为它们是无状态的(我将不在这里列出所有的好处)。。
然而,scala(定义为函数式编程)是建立在jvm之上的,因此我相信它具有与java(se)相同的内存管理。
1) 内存管理是jvm的特性还是JavaSE的特性?
2) 如果内存管理是jvm的一个特性,那么scala为什么被定义为函数式编程语言呢?

vuv7lop3

vuv7lop31#

首先,scala不是一种纯粹的函数式语言。如果需要,它有可变的变量和数据结构。然而,这并不是jvm拥有堆和堆栈的结果,而是简单的实用性。事实上,大多数函数式语言并不是纯粹的函数式语言。
也就是说,已经存在的纯函数式语言(例如haskell)也有一个堆和一个堆栈(或者更确切地说,每个线程有一个堆栈),完全没有理由不能在jvm上实现纯函数式语言(除了在jvm上的实用语言,提供与java库互操作的能力是一个好主意,其中许多库都具有可变对象的特性。
堆中的值可能随时间变化
如果更改堆(或堆栈)中的值,它们就会更改。如果你不改变它们,它们就不会改变。如果你的语言不允许你改变它们,它们就不能改变。栈或堆并不能阻止语言拥有不可变的变量和/或对象。就像没有什么可以阻止你声明所有的变量一样 final 在java中(并且只使用 final 成员)。

相关问题