精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java運行時如何使用本機內存

開發 后端
Java 堆耗盡并不是造成 java.lang.OutOfMemoryError 的惟一原因。如果本機內存 耗盡,則會發生普通調試技巧無法解決的 OutOfMemoryError。本文將討論Java 運行時如何使用本機內存。

Java 運行時是一個操作系統進程,它會受到我在上一節中列出的硬件和操作系統局限性的限制。運行時環境提供的功能受一些未知的用戶代碼驅動,這使得無法預測在每種情形中運行時環境將需要何種資源。Java 應用程序在托管 Java 環境中執行的每個操作都會潛在地影響提供該環境的運行時的需求。本節描述 Java 應用程序為什么和如何使用本機內存。

Java 堆和垃圾收集

Java 堆是分配了對象的內存區域。大多數 Java SE 實現都擁有一個邏輯堆,但是一些專家級 Java 運行時擁有多個堆,比如實現 Java 實時規范(Real Time Specification for Java,RTSJ)的運行時。一個物理堆可被劃分為多個邏輯扇區,具體取決于用于管理堆內存的垃圾收集(GC)算法。這些扇區通常實現為連續的本機內存塊,這些內存塊受 Java 內存管理器(包含垃圾收集器)控制。

堆的大小可以在 Java 命令行使用 -Xmx-Xms 選項來控制(mx 表示堆的***大小,ms 表示初始大小)。盡管邏輯堆(經常被使用的內存區域)可以根據堆上的對象數量和在 GC 上花費的時間而增大和縮小,但使用的本機內存大小保持不變,而且由 -Xmx 值(***堆大小)指定。大部分 GC 算法依賴于被分配為連續的內存塊的堆,因此不能在堆需要擴大時分配更多本機內存。所有堆內存必須預先保留。

保留本機內存與分配本機內存不同。當本機內存被保留時,無法使用物理內存或其他存儲器作為備用內存。盡管保留地址空間塊不會耗盡物理資源,但會阻止內存被用于其他用途。由保留從未使用的內存導致的泄漏與泄漏分配的內存一樣嚴重。

當使用的堆區域縮小時,一些垃圾收集器會回收堆的一部分(釋放堆的后備存儲空間),從而減少使用的物理內存。

對于維護 Java 堆的內存管理系統,需要更多本機內存來維護它的狀態。當進行垃圾收集時,必須分配數據結構來跟蹤空閑存儲空間和記錄進度。這些數據結構的確切大小和性質因實現的不同而不同,但許多數據結構都與堆大小成正比。

即時 (JIT) 編譯器

JIT 編譯器在運行時編譯 Java 字節碼來優化本機可執行代碼。這極大地提高了 Java 運行時的速度,并且支持 Java 應用程序以與本機代碼相當的速度運行。

字節碼編譯使用本機內存(使用方式與 gcc 等靜態編譯器使用內存來運行一樣),但 JIT 編譯器的輸入(字節碼)和輸出(可執行代碼)必須也存儲在本機內存中。包含多個經過 JIT 編譯的方法的 Java 應用程序會使用比小型應用程序更多的本機內存。

類和類加載器

Java 應用程序由一些類組成,這些類定義對象結構和方法邏輯。Java 應用程序也使用 Java 運行時類庫(比如 java.lang.String)中的類,也可以使用第三方庫。這些類需要存儲在內存中以備使用。

存儲類的方式取決于具體實現。Sun JDK 使用***生成(permanent generation,PermGen)堆區域。Java 5 的 IBM 實現會為每個類加載器分配本機內存塊,并將類數據存儲在其中。現代 Java 運行時擁有類共享等技術,這些技術可能需要將共享內存區域映射到地址空間。要理解這些分配機制如何影響您 Java 運行時的本機內存占用,您需要查閱該實現的技術文檔。然而,一些普遍的事實會影響所有實現。

從最基本的層面來看,使用更多的類將需要使用更多內存。(這可能意味著您的本機內存使用量會增加,或者您必須明確地重新設置 PermGen 或共享類緩存等區域的大小,以裝入所有類)。記住,不僅您的應用程序需要加載到內存中,框架、應用服務器、第三方庫以及包含類的 Java 運行時也會按需加載并占用空間。

Java 運行時可以卸載類來回收空間,但是只有在非常嚴酷的條件下才會這樣做。不能卸載單個類,而是卸載類加載器,隨其加載的所有類都會被卸載。只有在以下情況下才能卸載類加載器:

  • Java 堆不包含對表示該類加載器的 java.lang.ClassLoader 對象的引用。
  • Java 堆不包含對表示類加載器加載的類的任何 java.lang.Class 對象的引用。
  • 在 Java 堆上,該類加載器加載的任何類的所有對象都不再存活(被引用)。

需要注意的是,Java 運行時為所有 Java 應用程序創建的 3 個默認類加載器( bootstrapextensionapplication )都不可能滿足這些條件,因此,任何系統類(比如 java.lang.String)或通過應用程序類加載器加載的任何應用程序類都不能在運行時釋放。

即使類加載器適合進行收集,運行時也只會將收集類加載器作為 GC 周期的一部分。一些實現只會在某些 GC 周期中卸載類加載器。

也可能在運行時生成類,而不用釋放它。許多 JEE 應用程序使用 JavaServer Pages (JSP) 技術來生成 Web 頁面。使用 JSP 會為執行的每個 .jsp 頁面生成一個類,并且這些類會在加載它們的類加載器的整個生存期中一直存在 —— 這個生存期通常是 Web 應用程序的生存期。

另一種生成類的常見方法是使用 Java 反射。反射的工作方式因 Java 實現的不同而不同,但 Sun 和 IBM 實現都使用了這種方法,我馬上就會講到。

當使用 java.lang.reflect API 時,Java 運行時必須將一個反射對象(比如 java.lang.reflect.Field)的方法連接到被反射到的對象或類。這可以通過使用 Java 本機接口(Java Native Interface,JNI)訪問器來完成,這種方法需要的設置很少,但是速度緩慢。也可以在運行時為您想要反射到的每種對象類型動態構建一個類。后一種方法在設置上更慢,但運行速度更快,非常適合于經常反射到一個特定類的應用程序。

Java 運行時在最初幾次反射到一個類時使用 JNI 方法,但當使用了若干次 JNI 方法之后,訪問器會膨脹為字節碼訪問器,這涉及到構建類并通過新的類加載器進行加載。執行多次反射可能導致創建了許多訪問器類和類加載器。保持對反射對象的引用會導致這些類一直存活,并繼續占用空間。因為創建字節碼訪問器非常緩慢,所以 Java 運行時可以緩存這些訪問器以備以后使用。一些應用程序和框架還會緩存反射對象,這進一步增加了它們的本機內存占用。

JNI

JNI 支持本機代碼(使用 C 和 C++ 等本機編譯語言編寫的應用程序)調用 Java 方法,反之亦然。Java 運行時本身極大地依賴于 JNI 代碼來實現類庫功能,比如文件和網絡 I/O。JNI 應用程序可能通過 3 種方式增加 Java 運行時的本機內存占用:

  • JNI 應用程序的本機代碼被編譯到共享庫中,或編譯為加載到進程地址空間中的可執行文件。大型本機應用程序可能僅僅加載就會占用大量進程地址空間。

  • 本機代碼必須與 Java 運行時共享地址空間。任何本機代碼分配或本機代碼執行的內存映射都會耗用 Java 運行時的內存。

  • 某些 JNI 函數可能在它們的常規操作中使用本機內存。GetTypeArrayElementsGetTypeArrayRegion 函數可以將 Java 堆數據復制到本機內存緩沖區中,以供本機代碼使用。是否復制數據依賴于運行時實現。(IBM Developer Kit for Java 5.0 和更高版本會進行本機復制)。通過這種方式訪問大量 Java 堆數據可能會使用大量本機堆。

NIO

Java 1.4 中添加的新 I/O (NIO) 類引入了一種基于通道和緩沖區來執行 I/O 的新方式。就像 Java 堆上的內存支持 I/O 緩沖區一樣,NIO 添加了對直接 ByteBuffer 的支持(使用 java.nio.ByteBuffer.allocateDirect() 方法進行分配), ByteBuffer 受本機內存而不是 Java 堆支持。直接 ByteBuffer 可以直接傳遞到本機操作系統庫函數,以執行 I/O — 這使這些函數在一些場景中要快得多,因為它們可以避免在 Java 堆與本機堆之間復制數據。

對于在何處存儲直接 ByteBuffer 數據,很容易產生混淆。應用程序仍然在 Java 堆上使用一個對象來編排 I/O 操作,但持有該數據的緩沖區將保存在本機內存中,Java 堆對象僅包含對本機堆緩沖區的引用。非直接 ByteBuffer 將其數據保存在 Java 堆上的 byte[] 數組中。下圖展示了直接與非直接 ByteBuffer 對象之間的區別:

直接與非直接 java.nio.ByteBuffer 的內存拓撲結構
ByteBuffer 內存安排

直接 ByteBuffer 對象會自動清理本機緩沖區,但這個過程只能作為 Java 堆 GC 的一部分來執行,因此它們不會自動響應施加在本機堆上的壓力。GC 僅在 Java 堆被填滿,以至于無法為堆分配請求提供服務時發生,或者在 Java 應用程序中顯式請求它發生(不建議采用這種方式,因為這可能導致性能問題)。

發生垃圾收集的情形可能是,本機堆被填滿,并且一個或多個直接 ByteBuffers 適合于垃圾收集(并且可以被釋放來騰出本機堆的空間),但 Java 堆幾乎總是空的,所以不會發生垃圾收集。

線程

應用程序中的每個線程都需要內存來存儲器堆棧(用于在調用函數時持有局部變量并維護狀態的內存區域)。每個 Java 線程都需要堆棧空間來運行。根據實現的不同,Java 線程可以分為本機線程和 Java 堆棧。除了堆棧空間,每個線程還需要為線程本地存儲(thread-local storage)和內部數據結構提供一些本機內存。

堆棧大小因 Java 實現和架構的不同而不同。一些實現支持為 Java 線程指定堆棧大小,其范圍通常在 256KB 到 756KB 之間。

盡管每個線程使用的內存量非常小,但對于擁有數百個線程的應用程序來說,線程堆棧的總內存使用量可能非常大。如果運行的應用程序的線程數量比可用于處理它們的處理器數量多,效率通常很低,并且可能導致糟糕的性能和更高的內存占用。

【編輯推薦】

  1. 本機內存簡介:操作系統,硬件限制及虛擬內存
  2. Java 理論與實踐: 用弱引用堵住內存泄漏
  3. Java內存泄漏的檢測和處理
  4. 幾種典型的Java內存泄漏
  5. 詳細介紹Java的內存管理與內存泄露
責任編輯:yangsai 來源: IBMDW
相關推薦

2021-08-13 08:15:23

JVM 虛擬機Java

2015-07-20 15:44:46

Swift框架MJExtension反射

2023-02-12 12:00:57

2021-08-18 08:32:09

代碼運行時間示波器

2024-03-21 09:15:58

JS運行的JavaScrip

2020-04-06 11:47:44

Linux命令腳本

2019-07-12 09:30:12

DashboardDockerDNS

2021-09-11 15:38:23

容器運行鏡像開放

2022-10-08 00:00:00

V8channel對象

2020-11-16 09:28:41

函數內存

2010-02-25 16:27:44

WCF擴展點

2022-10-08 00:06:00

JS運行V8

2021-10-14 09:53:38

鴻蒙HarmonyOS應用

2024-03-20 10:46:00

云原生容器

2022-01-19 08:50:53

設備樹Linux文件系統

2020-12-07 13:31:43

GoMutex開發者

2023-07-28 10:42:43

2023-01-03 09:10:21

2013-11-26 16:49:55

Android開發運行時KitKat

2015-09-09 10:10:35

運行時改變圖標
點贊
收藏

51CTO技術棧公眾號

性农村xxxxx小树林| 欧美日韩午夜爽爽| 在线观看视频二区| 欧美日韩a区| 亚洲免费电影在线观看| 色戒在线免费观看| 99爱在线视频| 国产精品久久久久久久久果冻传媒| 91精品免费视频| 欧美一级片免费在线观看| 不卡视频在线| 亚洲福利在线播放| 婷婷中文字幕在线观看| 中文字幕这里只有精品| 亚洲啪啪综合av一区二区三区| 国产亚洲精品自在久久| 中文字幕第三页| 99热免费精品| 九九久久久久99精品| 三上悠亚ssⅰn939无码播放| 国产日韩中文在线中文字幕| 欧美视频中文在线看| 黄色高清视频网站| 国产在线网站| 成人av网站大全| 亚洲自拍偷拍色图| www.久久网| 中文精品视频| 久久久久九九九九| www青青草原| 日韩在线二区| 亚洲最新av在线网站| 国产又粗又猛又色| 136导航精品福利| 在线不卡的av| 日本xxxx黄色| 国模视频一区| 91黄视频在线观看| 浮妇高潮喷白浆视频| 日韩另类在线| 亚洲综合视频在线观看| 国内精品国产三级国产99| а√天堂中文在线资源bt在线| wwwwww.欧美系列| 国产精品播放| 亚洲精品喷潮一区二区三区| 国产精品一品二品| 91午夜理伦私人影院| 91 中文字幕| 精品无人区卡一卡二卡三乱码免费卡| 国产精品video| 亚洲精品久久久久久久蜜桃| 久久国产福利| 国产成人一区三区| 欧美亚洲另类小说| 日本午夜一区二区| 国产精品一区二区性色av | 日本成人免费在线| 久久青青草视频| 久久精品伊人| 国产精品久久久久久久久久ktv| 欧美日韩一级黄色片| 国产一区二区三区的电影 | 欧美午夜性视频| av资源中文在线| 欧美日韩精品国产| 情侣黄网站免费看| 日本成人福利| 91精品欧美福利在线观看| 日本高清久久久| 亚洲一区二区小说| 日韩午夜中文字幕| 国产一级免费片| 中文字幕精品影院| 最近2019年好看中文字幕视频| 国产黄色片在线| 综合一区av| 午夜精品久久久久久久99黑人| 欧美三日本三级少妇99| 久久国产精品毛片| 国产精品美女www| av男人天堂网| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美人与物videos另类| 日本中文在线观看| 亚洲国产精品一区二区www在线 | 国产在线视频不卡二| 99久久久久国产精品免费 | 色综合伊人色综合网| 夫妇露脸对白88av| 欧美日韩三级| 国产精品久久久久9999| 国产高清免费在线观看| 91在线一区二区三区| 亚洲午夜精品国产| 国产三线在线| 欧美视频日韩视频| yjizz视频| 日韩久久精品| 97精品欧美一区二区三区| 成人黄色三级视频| 成人av免费观看| 一本一道久久久a久久久精品91 | 91免费国产网站| 欧洲成人一区二区三区| 中文字幕 久热精品 视频在线| 日韩欧美猛交xxxxx无码| 天堂久久午夜av| 亚洲国内高清视频| 玖玖爱这里只有精品| 蜜桃视频一区| 国产一区二区三区无遮挡| 日本最新在线视频| 色综合中文字幕国产| 九九热视频免费| 精品日韩欧美一区| 91超碰caoporn97人人| 99久久国产免费| 国产精品久久久久影院色老大| 六月婷婷在线视频| 欧美一区一区| 按摩亚洲人久久| 无码人妻精品一区二区三区9厂| 国v精品久久久网| 中文字幕第50页| 黄色欧美视频| 国产一区二区三区在线| 国产精品男女视频| 成人a免费在线看| 成年女人18级毛片毛片免费| 日韩在线电影| 色七七影院综合| 亚洲视屏在线观看| 国产亚洲欧美日韩在线一区| www.av片| 国产劲爆久久| 国语自产精品视频在线看一大j8 | 亚洲欧美一区二区三区久久| 久久精品99久久久久久| 国产一区二区免费看| 伊人狠狠色丁香综合尤物| 成人看片在线观看| 国产亚洲欧美日韩精品| 精品人妻无码一区二区性色| 99天天综合性| 日韩av在线第一页| 天堂网av成人| 欧洲亚洲妇女av| 经典三级在线| 欧美亚洲自拍偷拍| 能直接看的av| 精品一区二区精品| 国产对白在线播放| 日本精品视频| 午夜精品一区二区三区视频免费看| 亚洲精品国产一区二| 亚洲一区二区不卡免费| 男人网站在线观看| 亚洲综合精品| 亚洲va韩国va欧美va精四季| 久久精品97| 九九热最新视频//这里只有精品| 国产极品999| 亚洲.国产.中文慕字在线| 日本一级片在线播放| 香蕉久久国产| 亚洲欧美日韩国产yyy| 91精品国产自产观看在线| 九九精品视频在线| 香蕉久久国产av一区二区| 色一情一乱一乱一91av| 在线观看国产精品一区| 久草精品在线观看| 欧美大黑帍在线播放| 欧美aaaaaaaa牛牛影院| 国产精品老女人精品视频| 国产区在线看| 亚洲国产精品一区二区久| 波多野结衣日韩| 亚洲欧美乱综合| 国产肉体xxxx裸体784大胆| 青青草一区二区三区| 日本精品福利视频| 天堂在线精品| 亚洲综合精品一区二区| 欧美办公室脚交xxxx| 日韩亚洲综合在线| 五月天婷婷社区| 欧美人牲a欧美精品| 日本亚洲色大成网站www久久| 久久九九国产精品| 小早川怜子一区二区三区| 日韩午夜av| 黄色免费高清视频| 免费久久精品| 18成人在线| 亚洲第一影院| 欧美大片在线看| 番号集在线观看| 精品免费国产二区三区| 毛片在线免费播放| 亚洲午夜一区二区三区| 能直接看的av| 91久色porny| 国产又粗又猛又爽又黄| 日本亚洲三级在线| 无码播放一区二区三区| 欧美一区影院| 一本一道久久久a久久久精品91| 欧美精品中文字幕亚洲专区| 91免费在线视频| 日本综合视频| 91国语精品自产拍在线观看性色| 国产传媒在线播放| 在线不卡国产精品| 日韩欧美在线观看一区二区| 欧美v日韩v国产v| 国产精品久久久久久久久毛片 | 国产精品999| 波多野结衣在线播放| 久久影院资源网| 在线观看完整版免费| 亚洲毛茸茸少妇高潮呻吟| 亚洲乱熟女一区二区| 欧美一区二区精品在线| 亚洲一级黄色大片| 欧美性猛交xxxx乱大交退制版| 国产精品免费av一区二区| 亚洲综合在线视频| 精品国产视频一区二区三区| 中文字幕欧美日本乱码一线二线| 亚洲专区区免费| 91亚洲国产成人精品一区二区三| 国产老头和老头xxxx×| 狠狠网亚洲精品| 中文字幕成人免费视频| 美美哒免费高清在线观看视频一区二区| 激情六月丁香婷婷| 美女日韩在线中文字幕| 国产成人av影视| 久久婷婷麻豆| 日本免费观看网站| 奇米在线7777在线精品| 8x8x最新地址| 久久国产三级精品| 国产精欧美一区二区三区白种人| 久久99精品久久久久久国产越南 | 国产福利一区在线观看| 日韩欧美中文视频| 国产成人精品亚洲日本在线桃色| 国产毛片久久久久久| 国产一区二区视频在线播放| 深夜福利网站在线观看| 国产成人免费网站| 亚洲精品乱码久久久久久蜜桃图片| 成人白浆超碰人人人人| 影音先锋人妻啪啪av资源网站| 99在线精品视频| 亚洲区自拍偷拍| 国产精品色在线观看| 老司机深夜福利网站| 中文字幕五月欧美| 日本天堂中文字幕| 亚洲成人免费观看| 欧美a视频在线观看| 色av成人天堂桃色av| 中文字幕在线观看1| 91精选在线观看| 国内爆初菊对白视频| 日韩精品中文字幕久久臀| 黄色在线网站| 久久亚洲私人国产精品va| 久草在线视频网站| 日韩美女写真福利在线观看| 热久久久久久| 国产精品视频一区二区三区经| 婷婷亚洲精品| 国产高清精品软男同| 亚洲福利免费| av网站在线不卡| 国产成人亚洲综合a∨猫咪| 国产福利短视频| 国产精品热久久久久夜色精品三区 | 亚洲一区二区激情| 日韩欧美一区二区视频| 全色精品综合影院| 久久精品视频一| 亚洲男人av| 成人看片人aa| 亚洲丝袜美腿一区| 亚洲.欧美.日本.国产综合在线 | 50路60路老熟妇啪啪| 国产在线精品一区二区夜色 | 久久乐国产精品| av亚洲一区| 国产精品一区二区你懂得| 国产伦一区二区三区| 欧美 国产 精品| 日韩不卡一区二区| 欧美图片自拍偷拍| 国产精品视频一二三| 日本免费一二三区| 在线播放国产精品二区一二区四区| 五月婷婷六月激情| 久久在线精品视频| 成人全视频在线观看在线播放高清| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 日本国产一区二区三区| 在线视频亚洲欧美中文| 亚洲国产欧洲综合997久久 | 97人人做人人爱| japansex久久高清精品| 清纯唯美一区二区三区| 在线成人欧美| 手机av在线网站| 中文字幕一区二区日韩精品绯色| 欧美成人一区二区三区四区| 精品久久一区二区| av免费在线免费观看| 国产精品视频成人| 久久不见久久见国语| 免费不卡av在线| 国产精品一级二级三级| 日本 欧美 国产| 欧美网站大全在线观看| 久草在线免费福利资源| 欧美一级片久久久久久久| 国产精品久久久久久久久久白浆| 成人短视频在线看| 麻豆国产91在线播放| 久久久久无码精品国产sm果冻| 岛国av在线不卡| 五月激情六月婷婷| 66m—66摸成人免费视频| 国产精品chinese在线观看| 九九久久九九久久| 国产精品资源站在线| 国产一区二区三区在线视频观看| 欧美日韩小视频| 麻豆传媒在线观看| 91在线色戒在线| 综合久久99| 折磨小男生性器羞耻的故事| 一个色综合网站| 粉嫩小泬无遮挡久久久久久| 欧美丰满少妇xxxxx| 一区二区三区亚洲变态调教大结局| 福利网在线观看| 国产成人在线视频播放| 久久久久香蕉视频| 欧美精品一区二区三区蜜桃 | 99中文视频在线| 亚洲二区在线| 国产熟妇久久777777| 在线免费观看成人短视频| jyzzz在线观看视频| 国产在线观看91精品一区| 久久久久久久久久久9不雅视频| 欧美一级特黄aaa| 亚洲一区中文在线| 天天干,夜夜爽| 55夜色66夜色国产精品视频| 久久av电影| 男生操女生视频在线观看 | 久久综合色一综合色88| 国产成人无码一区二区在线播放| 亚洲性生活视频| 91精品国产自产观看在线 | 手机av在线看| 精品国产乱码久久久久久影片| 理论不卡电影大全神| 欧美一区二区三区四区在线观看地址| 日本亚洲天堂网| 久久黄色免费视频| 亚洲欧洲午夜一线一品| 91精品一区| 波多野结衣家庭教师在线播放| 国产午夜精品在线观看| 97人妻一区二区精品免费视频| 欧美日本高清一区| 精品国产一区二区三区小蝌蚪| 51自拍视频在线观看| 精品国产乱码久久久久久虫虫漫画| 黄色小视频在线观看| 亚洲aⅴ日韩av电影在线观看| 亚洲狠狠婷婷| 日本一二三不卡视频| 欧美成人免费网站| 高清av一区二区三区| 992tv快乐视频| 国产欧美一区二区精品性色| www.久久久久久| 国产精品精品视频| 伊人久久综合| 亚洲综合第一区| 亚洲精品国产精品国产自| **欧美日韩在线| 日本在线视频www| 亚洲小说欧美激情另类| av在线播放网站|