【发布时间】:2018-12-06 11:03:31
【问题描述】:
我很好奇我们执行 Java 程序时内存中发生了什么,所以我看了一些简短的教程只是为了有一个基本的了解。
那些“教程”正在讨论堆和堆栈以及它们的工作原理以及它们的用途。
Java SE 作为 OOP 语言被定义为有状态的,这意味着变量随时间变化(例如 x = x + 1)。
考虑到该变量“分布”在堆和堆栈中,我可以理解为什么 Java 是有状态的以及为什么我们会遇到并发问题。
然而,函数式编程语言似乎不会受到这些问题的影响,因为它们是无状态的(我不会在这里列出所有的好处)..
然而,Scala,被定义为函数式编程,是建立在 JVM 之上的,所以我相信它具有与 Java (SE) 相同的内存管理。
1) 内存管理是 JVM 还是 Java SE 的特性?
2) 如果内存管理是 JVM 的特性,那么 Scala 怎么会被定义为函数式编程语言?
【问题讨论】:
-
你能解释一下为什么你认为拥有一个堆和一个栈(或多或少所有语言实现都这样做)与函数式编程不一致吗?
-
据我了解,每个线程都有一个堆和一个堆栈。当我们创建一个对象时,我们在堆中分配内存,但变量存储在堆栈中。所以现在想象一下,我们有几个线程并且我们共享堆内存,其中一些可能会尝试操作相同的值(并发),并且堆中的值可能会随时间而变化(从这里我假设 Java SE 的有状态性质).我想知道内存管理在 Scala 这样的编程语言中是如何工作的,以及是什么使它成为无状态的。我认为内存管理中的某些内容与 java 相比有所不同
标签: java scala memory-management