簡體   English   中英

Java SE內存管理與Scala內存管理

[英]Java SE memory management vs Scala memory management

我對執行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庫進行互操作的能力是一個好主意,其中許多具有可變對象。

堆中的值可能隨時間變化

如果您更改堆(或與此有關的堆棧)中的值,則它們會更改。 如果您不更改它們,則它們也不會更改。 如果您的語言不允許您更改它們,則它們不能更改。 關於堆棧或堆的任何事情都不會阻止語言具有不變的變量和/或對象。 就像沒有什么阻止您在Java中將所有變量聲明為final (並且僅使用也只有final成員的類)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM