gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:47:20 24 4
gpt4 key购买 nike

我很好奇执行 Java 程序时内存中发生的情况,因此我观看了一些简短的教程,只是为了有一个基本的了解。

那些“教程”正在谈论堆和堆栈以及它们的工作原理以及它们的用途。

Java SE 作为 OOP 语言被定义为有状态的,这意味着变量随时间变化(例如 x = x + 1)。

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

然而,函数式编程语言似乎不会遇到这些问题,因为它们是无状态的(具有我不会在这里列出的所有好处)..

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

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

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

最佳答案

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

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

values in the heap may change in function of time

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

关于Java SE 内存管理与 Scala 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com