精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一个人看的视频www| 国产av不卡一区二区| 亚洲av无码不卡| 久久久久国产精品| 欧美成人在线直播| 成年人视频网站免费观看| eeuss影院www在线播放| 国产美女主播视频一区| 婷婷激情图片久久| 久久精子c满五个校花| 国产精品一二三视频| 免费三片在线播放| 国产成人ay| 日韩精品自拍偷拍| 精品久久久久av| 少女频道在线观看高清| 久久久亚洲国产美女国产盗摄| 成人午夜高潮视频| 精品国产午夜福利| 欧美日本中文| 日韩在线视频一区| 成人影视免费观看| 97视频一区| 在线不卡a资源高清| 日日橹狠狠爱欧美超碰| 图片区小说区亚洲| 国产精品污污网站在线观看| 精品无人区一区二区三区| av在线免费在线观看| 日本美女一区二区三区视频| 97精品国产97久久久久久免费| 日本免费网站视频| 伊人久久大香线蕉无限次| 欧美刺激午夜性久久久久久久| 91精品蜜臀在线一区尤物| av一区二区三区免费| 中文字幕+乱码+中文| 中国女人久久久| 久久久久久高潮国产精品视| 韩国一级黄色录像| 成人羞羞网站入口免费| 日韩精品视频在线播放| 久久久久99人妻一区二区三区| 日韩第二十一页| 91国在线观看| 日韩av在线综合| 日本不良网站在线观看| 亚洲国产成人av好男人在线观看| 肉大捧一出免费观看网站在线播放| 在线看免费av| 欧美国产日韩a欧美在线观看| 久久亚洲免费| 青青青免费视频在线2| av电影在线观看一区| 国产精品久久国产三级国电话系列| 国产99久久九九精品无码免费| 国产综合色视频| 91在线观看欧美日韩| 国产麻豆91视频| 国内精品久久久久影院薰衣草| 91欧美激情另类亚洲| av资源免费看| 国产成人精品免费看| 999国内精品视频在线| 亚洲国产精品久久久久爰性色| 国产99一区视频免费| 国产精品中出一区二区三区| 视频一区二区免费| 久久一区二区三区四区| 欧美一进一出视频| 成人h小游戏| 亚洲欧美色一区| 青春草国产视频| 欧美aa在线观看| 在线免费观看日本欧美| 亚洲欧美视频二区| 亚洲国产高清在线观看| 亚洲国产精品999| 制服 丝袜 综合 日韩 欧美| 99久久久久国产精品| 超碰97人人做人人爱少妇| 青草草在线视频| 国产欧美激情| 国产精品天天狠天天看| av在线亚洲天堂| 91亚洲国产成人精品一区二三| 美女三级99| 黄色在线免费网站| 亚洲一级二级在线| 成人精品视频一区二区| 久久久久亚洲精品中文字幕| 日韩成人激情视频| 黑人と日本人の交わりビデオ| 亚洲综合小说| 日韩av毛片网| 99久久免费国产精精品| 97精品视频在线观看自产线路二| 色姑娘综合av| 免费在线国产视频| 日本精品视频一区二区三区| 成人免费黄色av| 欧美人与物videos另类xxxxx| 日韩一区二区三区xxxx| 中国一级免费毛片| 蜜臀av一区二区在线免费观看| 99理论电影网| seseavlu视频在线| 午夜电影一区二区| 久久精品视频在线观看免费| 亚洲尤物av| 久久97精品久久久久久久不卡 | 亚洲成人中文字幕在线| 国产丝袜美腿一区二区三区| 国产成人一区二区三区别| 制服诱惑亚洲| 日韩电影网在线| 懂色av懂色av粉嫩av| 奇米色一区二区| 蜜桃欧美视频| heyzo在线| 欧美一区二区三级| 99久久精品久久亚洲精品| 蘑菇福利视频一区播放| 成人av中文| 国产美女福利在线| 欧美视频一区二区| 亚洲精品视频大全| 亚洲国产一区二区精品专区| 91在线视频导航| 69av亚洲| 欧美写真视频网站| a毛片毛片av永久免费| 亚洲三级免费| 国产伦精品一区二区三区四区视频| 黄色免费在线观看| 欧美老肥妇做.爰bbww| 一区二区黄色片| 久久午夜电影| 欧美中文娱乐网| 中文在线а√在线8| 亚洲国产毛片完整版| 久久无码精品丰满人妻| 国产精品77777| av动漫在线播放| 视频精品国内| 久久久久久高潮国产精品视| 高h放荡受浪受bl| 亚洲国产日日夜夜| 无码人妻精品一区二区三区99不卡| 欧美特黄一级| 国产综合18久久久久久| 国产理论在线| 亚洲精品一区二区三区不| 国产特黄大片aaaa毛片| 91麻豆成人久久精品二区三区| 激情综合在线观看| 先锋影音国产精品| 国产成人精品网站| 在线视频91p| 欧美一级二级三级乱码| 欧美久久久久久久久久久久| 成人免费黄色大片| 欧美黄色免费影院| 精品久久久久久久久久久下田| 国产成人免费91av在线| av在线三区| 欧美一区二区三区在线观看| 麻豆国产尤物av尤物在线观看 | 国产欧美一级| 日韩av图片| 国产不卡精品在线| 欧美黑人性视频| 精品三级久久久久久久电影聊斋| 欧美专区亚洲专区| 美女的奶胸大爽爽大片| 91在线高清观看| 日韩av手机版| 欧美天天视频| 欧美主播一区二区三区美女 久久精品人 | 91精品国产高清91久久久久久| 最新成人av网站| 日韩资源av在线| 久久中文字幕一区二区| 午夜欧美不卡精品aaaaa| 高清在线观看av| 欧美xxxxxxxxx| 免费无码国产精品| 亚洲精品网站在线观看| 无码人妻aⅴ一区二区三区| 老司机精品视频一区二区三区| 久久www视频| 欧美欧美黄在线二区| 亚洲永久免费观看| 卡通欧美亚洲| 欧美日韩高清区| 国产98在线| 亚洲第一精品福利| 一女二男一黄一片| 欧美日在线观看| 四虎永久免费在线| 久久精品欧美一区二区三区不卡| 超碰在线超碰在线| 久久久久一区| 亚洲精品蜜桃久久久久久| 欧美1级片网站| 免费久久99精品国产自| 久久久久亚洲精品中文字幕| 国产成人精品综合| heyzo在线欧美播放| 视频直播国产精品| 视频在线不卡| 日韩视频一区在线观看| 这里只有精品6| 一本色道久久综合狠狠躁的推荐| 久久婷婷综合国产| 成人免费小视频| 91麻豆精品国产91久久综合| 粉嫩蜜臀av国产精品网站| 亚洲另类第一页| 久久精品1区| 免费看一级大黄情大片| 欧美视频福利| 国内自拍中文字幕| 999精品在线| 日韩av不卡在线播放| 色婷婷狠狠五月综合天色拍| 成人av资源| 亚洲1区在线| 亚洲在线免费看| www久久久| 国产日韩欧美另类| 成人国产激情| 国产精品久久久久国产a级| 在线最新版中文在线| 欧美一区二区三区免费视| 免费网站在线观看人| 欧美激情精品久久久久久| 成人在线播放| 不卡av电影在线观看| 国产精品一区二区三区视频网站| 日韩在线观看免费| av电影在线观看一区二区三区| 亚洲网站视频福利| 黄色的视频在线免费观看| 亚洲色图第三页| 韩日在线视频| 伊人av综合网| 在线免费观看黄色av| 久久精品91久久久久久再现| 成人av免费| 久久99国产综合精品女同| 日本h片在线| 高清视频欧美一级| 中文字幕乱码中文乱码51精品| 4p变态网欧美系列| 中文字幕av一区二区三区佐山爱| 日本精品视频在线播放| 成人在线黄色| 成人精品视频在线| 国产精品一区二区三区四区在线观看 | 在线亚洲欧美视频| 成人高清免费观看mv| 久久偷看各类女兵18女厕嘘嘘| 亚洲资源一区| 91精品国产高清久久久久久| 日韩三级影视| 成人h视频在线| 亚洲国产中文在线| 久久久影院一区二区三区| 成人动漫免费在线观看| 91大学生片黄在线观看| 中文久久精品| 欧美成人黄色网址| 国产精品综合在线视频| 色综合久久五月| 国产女人aaa级久久久级| 91高清免费观看| 欧美日韩免费在线| 一区二区视频播放| 欧美精品一区二区三区久久久| 经典三级在线| 九色91av视频| 全亚洲第一av番号网站| 91在线观看免费高清完整版在线观看 | 久久精品亚洲| 91欧美一区二区三区| 99国产欧美久久久精品| 精品一区二区6| 亚洲国产精品一区二区久久| 无码人妻一区二区三区线| 91精品国产91久久久久久最新毛片| 天天综合网在线| www.色综合| 性国裸体高清亚洲| 91夜夜未满十八勿入爽爽影院| 日韩成人一级| 国产在线拍揄自揄拍无码| 999在线观看精品免费不卡网站| 中文字幕有码av| av电影在线观看一区| 永久免费看mv网站入口| 欧美午夜女人视频在线| 国产内射老熟女aaaa∵| 亚洲精品小视频| 美足av综合网| 成人精品网站在线观看| 美女毛片一区二区三区四区| 国产a级黄色大片| 美腿丝袜亚洲综合| 免费观看一级一片| 一区二区三区成人| 中文字幕乱码人妻无码久久| 亚洲女人天堂视频| 国产天堂在线播放视频| 亚洲一区二区三区视频播放| 精品成人影院| 国产在线青青草| 国产成人精品1024| 成人免费视频国产免费观看| 欧美伊人久久久久久午夜久久久久| 少妇无码一区二区三区| 欧美老女人性视频| 日韩第二十一页| 杨幂一区欧美专区| 日韩国产在线观看一区| 香蕉网在线播放| 精品久久久久国产| 日批视频免费播放| 久久免费视频网站| 一区二区三区四区精品视频| 蜜桃视频成人在线观看| 麻豆精品久久精品色综合| 亚洲一区二区三区日韩| 精品福利樱桃av导航| 天天操天天干天天爱| 高清欧美一区二区三区| caoporn成人免费视频在线| 欧美一级中文字幕| 国产成a人亚洲精品| 色欲人妻综合网| 91精品免费观看| 18网站在线观看| 99热国产免费| 尤物网精品视频| 欧美一区二区免费在线观看| 欧美日韩精品国产| 亚洲欧美一区二区三| 日本成人免费在线| 色棕色天天综合网| 爱情岛论坛vip永久入口| 日本一区二区高清| 国产一区二区女内射| 欧美精品免费看| 91成人在线精品视频| 99在线免费视频观看| 成人18视频在线播放| 日本中文在线播放| 亚洲日韩欧美视频一区| 成人黄色在线| 欧美性受xxxx黑人猛交88| 国产一区二区中文字幕| 久久久久久福利| 精品视频久久久久久久| 精品裸体bbb| 激情五月五月婷婷| 成人在线综合网| 精产国品一区二区| 精品国产一区久久久| 超碰精品在线| 午夜精品久久久内射近拍高清| 国产精品久久久久一区| 不卡的日韩av| 欧美一级大片视频| 999国产精品永久免费视频app| 免费在线观看日韩av| 欧美日韩一区二区在线| 无遮挡的视频在线观看| av一区观看| 日韩国产精品大片| www欧美com| 亚洲人成电影网站| 亚洲ww精品| 国产肥臀一区二区福利视频| 国产精品亲子乱子伦xxxx裸| 欧美一级淫片免费视频魅影视频| 日韩免费观看视频| 欧美伊人影院| av网在线播放| 精品奇米国产一区二区三区| 在线一区视频观看| 男人的天堂avav| 国产女主播在线一区二区| 午夜免费福利视频| 国产精品吴梦梦| 最新成人av网站| 免费看一级大片| 在线a欧美视频| 日韩三级av| 少妇极品熟妇人妻无码| 91官网在线观看|