一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java中的內存分配

Java中的內存分配

2021-02-28 22:17今日頭條聞數起舞 JAVA教程

內存分配是JVM [Java虛擬機]的一部分。因此,此時了解Java為什么需要JVM而沒有其他語言需要VM的重要性很重要。

眾所周知,JVM是一種抽象的計算機,可以使計算機運行程序。JVM加載代碼,驗證代碼,執行代碼,管理內存(從OS分配內存,管理Java分配(包括堆壓縮和垃圾回收))并提供運行時環境。

Java中的內存分配

內存分配是JVM [Java虛擬機]的一部分。因此,此時了解Java為什么需要JVM而沒有其他語言需要VM的重要性很重要。在許多其他語言中,編譯器為特定系統生成機器代碼,但是在Java中,Java編譯器始終為虛擬機(稱為JVM)而不是特定系統生成代碼。是JVM,它具有依賴于平臺的標簽,因此使Java(一種與平臺無關的編程語言)成為可能。JVM將Java字節碼轉換為機器可解釋的語言。JVM的兩個主要功能是允許Java程序在任何設備或操作系統上運行以及管理和優化程序內存。

內存管理是應用于計算機內存的一種資源管理形式。內存管理的基本要求是提供一種方法,可應程序的要求將部分內存分配給程序,并在不再需要時將其釋放以供重用。

為了更好地理解本文,建議您先閱讀本文,然后再繼續。

如上所述,我們將繼續了解有關如何完成內存分配以及在內存不足的情況下會發生什么錯誤的概念。內存分配是將物理或虛擬內存地址空間分配給進程的操作。

JVM內存分為多個部分:堆、非堆、其他。

  • 堆內存是運行時數據區,從中分配了所有java類實例和數組的內存。JVM啟動時會創建堆,并且隨著應用程序的運行,堆的大小可能會增加或減少。
  • 非堆內存是在JVM啟動時創建的,并存儲每個類的結構,例如字段和方法數據以及內聯的字符串[String Interning是一種僅存儲每個不同的String值的一個副本的方法,一成不變。通過在幾個字符串上應用String.intern()將確保所有具有相同內容的字符串共享相同的內存]。另一個內存用于存儲JVM代碼本身,JVM內部結構,已加載的概要代理代碼和數據。內存分配的兩種基本方法是靜態和動態內存分配。
  • 靜態內存分配在執行之前分配內存,而動態內存分配在執行期間將內存分配給進程。

內存分配是術語“綁定”的一般方面。假設我們聲明了一個類類型的變量并創建了對它的引用。為了將任何值存儲到這些變量中,我們必須為其分配內存。因此,我們可以將內存分配稱為“將內存地址分配給變量屬性的行為”

eg: int a = 10

靜態內存分配是指編譯器編譯程序并生成目標文件時,鏈接程序將這些目標文件合并為可執行文件,并在加載程序的幫助下將此可執行文件加載到主存儲器中。在靜態分配執行之前,必須知道進程所需的數據大小,從而使其更有效,從而可以更快地執行進程。動態內存分配在程序執行期間進行。在這里,當程序執行時第一次使用實體時,會為它們分配內存。它減少了內存浪費,因為它分配了實體所需的確切內存空間。

內存管理是操作系統的功能,該操作系統處理主內存并在執行過程中前后移動進程。處理內存管理的一些基本概念可能是進程地址空間,靜態|動態加載和鏈接。

(1) 進程地址空間:它是進程在其代碼中引用的一組邏輯地址。操作系統負責在將內存分配給程序時將邏輯地址映射到物理地址。在完成內存分配之前和之后,將使用三種類型的地址。符號地址,相對地址和物理地址…符號地址是源代碼中變量名,常量和指令標簽所使用的地址。相對地址是在編譯時從符號地址轉換的地址。當程序加載到主存儲器中時,加載器會生成物理地址。在編譯時,虛擬和物理地址保持不變,但在執行[運行時]時有所不同。

(2) 靜態與動態加載和鏈接:在開發程序時應決定選擇靜態還是動態加載。如果我們必須靜態地加載程序,那么在編譯時,整個程序將被編譯和鏈接,而不會留下任何外部模塊依賴性。鏈接器將目標程序與其他必要的目標模塊以及邏輯地址相結合。而如果我們正在加載動態程序,則編譯器將編譯該程序以及所需的模塊依賴關系的引用。該程序將提供。當使用靜態鏈接時,鏈接器將程序所需的所有其他模塊組合到單個可執行程序中,以避免任何運行時依賴性。而在動態鏈接的情況下,不需要將實際的模塊或庫與程序鏈接,而是可以附加對thm的引用。

在聲明對象時未分配內存,而是在引用時分配了內存。對于對象的內存分配,使用new()方法,因此對象始終分配在堆內存中。Java內存分配分為“堆”,“堆棧”,“代碼”和“靜態”部分,以進行有效管理。“代碼”部分包含字節碼,“堆棧”包含方法,局部變量和引用變量,“堆”部分包含“對象”,還可能包含引用變量,“靜態”部分僅包含靜態數據。

內存分配中最常見的錯誤是“ java.lang.OutOfMemoryError”,通常,當JVM由于內存不足而無法分配對象并且垃圾回收器無法再使用更多內存時,通常會引發該錯誤。

希望本文能幫助您更好地了解Java中的內存分配。

直到下一次…

和平了!

原文鏈接:https://medium.com/javamadetranquil/memory-allocation-in-java-fb2d4498a3ed

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内永久第一免费福利视频 | 贵妇的私人性俱乐部 | 亚洲精品午夜在线观看 | 九9热这里真品 | 爆操俄罗斯美女 | 欧美人妖另类性hd | 日本乱人伦中文在线播放 | 91桃花| 污到你怀疑人生 | 性德国高清xxxxbbbb | 久久久久久88色偷偷 | 欧美一卡二卡科技有限公司 | gay中国| 美女被的在线网站91 | 无码人妻精品一区二区蜜桃在线看 | 九九影院午夜理论片无码 | 国产乱子伦在线观看不卡 | 色综合网天天综合色中文男男 | 久久婷婷丁香五月色综合啪免费 | 男人天堂2023 | 冰山美人调教耻辱h | 俺去啦最新官网 | 男人的天堂欧美 | 五月天国产视频 | 黑帮少爷爱上我第8集在线观看 | 成人国产一区 | zoo性欧美| 精品女同一区二区三区免费站 | 日本免费观看的视频在线 | 91.prom在线观看国产 | 91在线亚洲精品一区 | 欧美高清无砖专区欧美精品 | 日韩亚洲一区中文字幕在线 | 欧美一区不卡二区不卡三区 | 国产高清视频网站 | 国产成人在线免费视频 | 爱情岛论坛亚洲一号路线 | 精品久久久久久久久久久 | 91porny丨首页| 韩国美女豪爽一级毛片 | 国产caonila在线观看 |