真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解Java中的內(nèi)存分配

本篇內(nèi)容主要講解“如何理解Java中的內(nèi)存分配”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“如何理解Java中的內(nèi)存分配”吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了灤平免費建站歡迎大家使用!

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

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

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

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

JVM內(nèi)存分為多個部分:堆、非堆、其他。

  • 堆內(nèi)存是運行時數(shù)據(jù)區(qū),從中分配了所有java類實例和數(shù)組的內(nèi)存。JVM啟動時會創(chuàng)建堆,并且隨著應(yīng)用程序的運行,堆的大小可能會增加或減少。

  • 非堆內(nèi)存是在JVM啟動時創(chuàng)建的,并存儲每個類的結(jié)構(gòu),例如字段和方法數(shù)據(jù)以及內(nèi)聯(lián)的字符串[String  Interning是一種僅存儲每個不同的String值的一個副本的方法,一成不變。通過在幾個字符串上應(yīng)用String.intern()將確保所有具有相同內(nèi)容的字符串共享相同的內(nèi)存]。另一個內(nèi)存用于存儲JVM代碼本身,JVM內(nèi)部結(jié)構(gòu),已加載的概要代理代碼和數(shù)據(jù)。內(nèi)存分配的兩種基本方法是靜態(tài)和動態(tài)內(nèi)存分配。

  • 靜態(tài)內(nèi)存分配在執(zhí)行之前分配內(nèi)存,而動態(tài)內(nèi)存分配在執(zhí)行期間將內(nèi)存分配給進程。

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

eg: int a = 10;

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

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

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

(2) 靜態(tài)與動態(tài)加載和鏈接:在開發(fā)程序時應(yīng)決定選擇靜態(tài)還是動態(tài)加載。如果我們必須靜態(tài)地加載程序,那么在編譯時,整個程序?qū)⒈痪幾g和鏈接,而不會留下任何外部模塊依賴性。鏈接器將目標(biāo)程序與其他必要的目標(biāo)模塊以及邏輯地址相結(jié)合。而如果我們正在加載動態(tài)程序,則編譯器將編譯該程序以及所需的模塊依賴關(guān)系的引用。該程序?qū)⑻峁?。?dāng)使用靜態(tài)鏈接時,鏈接器將程序所需的所有其他模塊組合到單個可執(zhí)行程序中,以避免任何運行時依賴性。而在動態(tài)鏈接的情況下,不需要將實際的模塊或庫與程序鏈接,而是可以附加對thm的引用。

在聲明對象時未分配內(nèi)存,而是在引用時分配了內(nèi)存。對于對象的內(nèi)存分配,使用new()方法,因此對象始終分配在堆內(nèi)存中。Java內(nèi)存分配分為“堆”,“堆棧”,“代碼”和“靜態(tài)”部分,以進行有效管理。“代碼”部分包含字節(jié)碼,“堆?!卑椒?,局部變量和引用變量,“堆”部分包含“對象”,還可能包含引用變量,“靜態(tài)”部分僅包含靜態(tài)數(shù)據(jù)。

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

到此,相信大家對“如何理解Java中的內(nèi)存分配”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


名稱欄目:如何理解Java中的內(nèi)存分配
標(biāo)題鏈接:http://weahome.cn/article/pojhio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部