成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入理解Java內存工作原理

開發
在Java中,JVM(Java虛擬機)負責自動管理內存,用于存儲變量、類、字段等等。JVM將內存劃分為兩個區域,分別是棧(Stack)和堆(Heap)。

在Java中,JVM(Java虛擬機)負責自動管理內存,用于存儲變量、類、字段等等。JVM將內存劃分為兩個區域,分別是棧(Stack)和堆(Heap)。

什么是棧

在JVM中,棧是一種高效的內存管理方式,每個線程都有自己的棧區域。棧采用堆疊的方式,將實例化的字段依次添加到內存中。不過,棧的大小是有限的,所以無法存儲整個對象。因此,原始類型和對象指針可以直接存儲在棧中,而不是整個對象。棧的名字就像它的功能一樣,只是一個堆疊的空間,無法容納大型對象。

當需要移除對象時,我們需要按照堆疊的順序逐個移除,即先移除最先添加的對象。這是因為數據在堆疊時,后添加的對象會放在先添加的對象的上方,如果不移除這些對象,就無法到達底部。簡而言之,要想取出底部的對象,必須先移除位于其上方的對象。

什么是堆

從GIF動畫中可以看到,堆的大小比棧要大,因為堆是存儲對象的主要區域。每個創建的對象都存儲在堆中,而對象的引用則存儲在棧中。這種設計方式使得棧和堆之間建立了關聯,通過棧中的引用可以訪問和操作堆中的對象。如下所示:

 public List<String> test() {
    String newString = "test";
    List<String> testList = new ArrayList<>();
    testList.add(newString);
    return testList;
  }

與之相反,應用程序只有一個堆。這個設計是合理的,因為我們可能需要在方法之間傳遞多個大型對象。棧主要用于存儲局部變量,可能會有多個棧存在,但它們都共享同一個堆來存儲對象。具體來說,對象的指針存儲在棧中。因此,當我們需要在方法之間傳遞對象時,不會在棧中復制整個對象,而是傳遞對象的引用。這種方式既高效又節省內存空間。

此外,堆實際上并不是一個固定的單一區域。如果你放大查看堆,你會看到4個不同的區域。

它們被稱為代(Generation)。堆建立在兩個主要代上,一個是年輕代(Young Generation),另一個是老年代(Old Generation)。年輕代又被分為三個空間,分別是Eden、Survivor 0和Survivor 1。當你學到它們的作用時,會更清楚。創建的對象首先放置在Eden空間中,然后當Eden空間滿時,對象會被移動到Survivor 0或Survivor 1。之后,創建的對象再次放置在Eden中。當Eden再次滿時,Eden和Survivor 0或1將被移動到Survivor 0或1。如果對象被移動超過五次,那么這些對象將被放置在老年代中。這意味著,現在這些對象是需要的,并且將存活在老年代中,除非失去了其引用。如果棧中沒有持有其引用的變量,這意味著該對象符合垃圾回收的條件。最后一個對性能問題非常重要,因此我們需要了解Java內存如何工作才能理解它。

Metaspace

除了之前提到的棧和堆區域外,內存中還有另一個區域,即Metaspace。Metaspace是存儲應用程序元數據的區域,它承擔著重要的任務。通常情況下,我們不需要深入了解Metaspace內部情況。Metaspace還有一個重要的功能,就是存儲靜態變量、方法和類。這也解釋了為什么靜態關鍵字可以從任何地方訪問,因為它們的存儲位置就在Metaspace中,這樣每個線程都可以方便地進行訪問。Metaspace的存在為我們提供了便利,使得靜態元素的訪問變得更加方便。

JVM啟動參數中的常用標志

可以通過設置一些標志來告訴JVM要執行的操作。以下是一些標志的示例:

  • XmsNg 設置初始大小
  • XmxNg 設置最大大小
  • XX:NewRatio=N 年輕代與老年代的比例
  • XX:NewSize=N 年輕代的初始大小
  • XX:MaxNewSize=N 年輕代的最大大小
責任編輯:趙寧寧 來源: Java學研大本營
相關推薦

2024-11-01 08:57:07

2020-11-04 15:35:13

Golang內存程序員

2021-09-08 06:51:52

AndroidRetrofit原理

2023-11-05 12:05:35

JVM內存

2024-03-12 00:00:00

Sora技術數據

2022-11-04 09:43:05

Java線程

2021-03-10 10:55:51

SpringJava代碼

2022-09-05 08:39:04

kubernetesk8s

2024-04-15 00:00:00

技術Attention架構

2020-08-10 18:03:54

Cache存儲器CPU

2022-07-06 08:05:52

Java對象JVM

2013-06-20 10:25:56

2020-03-26 16:40:07

MySQL索引數據庫

2022-01-14 12:28:18

架構OpenFeign遠程

2022-09-26 08:01:31

線程LIFO操作方式

2020-03-17 08:36:22

數據庫存儲Mysql

2019-07-01 13:34:22

vue系統數據

2022-09-05 22:22:00

Stream操作對象

2023-10-13 13:30:00

MySQL鎖機制

2015-03-24 13:28:52

Java Java Strin內存模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91伦理片 | 亚洲1区| 春色av| 国产福利91精品一区二区三区 | 欧美一级毛片在线播放 | 成人在线精品视频 | 天堂资源最新在线 | 久久久久久成人 | 国产成人精品一区二区三区 | 亚洲91| 国产精品美女久久久久aⅴ国产馆 | 久久一区二区三区四区 | 操夜夜| 欧洲毛片| 亚洲免费人成在线视频观看 | 日韩精品一区二区三区在线观看 | 日韩精品一区二区三区四区视频 | 国产综合第一页 | 中文字幕一区二区三区在线观看 | 国产精品久久久久久久久久久久久 | 中文字幕伊人 | 请别相信他免费喜剧电影在线观看 | 亚洲精品毛片av | 韩日一区二区 | 欧美在线视频网站 | 国产精品jizz在线观看老狼 | 日日骚网 | 成人免费视频 | 91在线视频免费观看 | 草草草久久久 | 97国产爽爽爽久久久 | 国产精品免费福利 | 中文av电影 | 欧美a级网站| 伊人春色在线 | 毛片高清 | 国产精品永久免费 | 一级黄色录像片子 | 国产精品欧美精品 | 亚洲iv一区二区三区 | 精品无码久久久久久国产 |