首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SE内存管理与Scala内存管理

Java SE内存管理与Scala内存管理
EN

Stack Overflow用户
提问于 2018-12-06 11:03:31
回答 1查看 281关注 0票数 0

当我们执行Java程序时,我对内存中发生的事情很好奇,所以我看了一些简短的教程,只是为了有一个基本的理解。

这些“教程”讨论的是堆和堆栈,以及它们是如何工作的以及它们的目的是什么。

Java作为一种面向对象语言被定义为有状态语言,这意味着变量在时间函数中发生变化(例如x=x+1 )。

考虑到变量在堆和堆栈中的“分布”,我可以理解为什么Java是有状态的,为什么我们会遇到并发问题。

然而,函数编程语言似乎不受这些问题的影响,因为它们是无状态的(我不打算在这里列出的所有好处)。

然而,Scala被定义为函数式编程,它构建在JVM上,因此我认为它具有Java (SE)的相同内存管理。

1)内存管理是JVM的特性还是Java的特性?

2)如果内存管理是JVM的一个特性,为什么Scala被定义为一种函数编程语言?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 11:40:29

首先,Scala不是一种纯函数式语言。它具有可变的变量和数据结构(如果需要的话)。然而,这并不是JVM具有堆和堆栈的结果,而是简单的实用主义。事实上,大多数函数式语言并不是纯函数式的。

也就是说,确实存在的纯函数语言(例如Haskell)也有堆和堆栈(或者更确切地说,每个线程有一个堆栈),而且绝对没有理由不能在JVM上实现纯函数语言(除了在JVM上提供与Java库互操作的能力(其中许多库都具有可变对象)之外的实用语言)。

堆中的值可能随时间变化而变化。

如果更改堆(或堆栈)中的值,则会更改它们。如果你不改变他们,他们就不会改变。如果你的语言不允许你改变它们,它们就无法改变。栈或堆不会阻止语言具有不可变的变量和/或对象。就像没有什么可以阻止您在Java中声明所有变量final一样(并且只使用也只有final成员的类)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53649985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档