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

Java中的內(nèi)存分配

開(kāi)發(fā) 后端
內(nèi)存分配是JVM [Java虛擬機(jī)]的一部分。因此,此時(shí)了解Java為什么需要JVM而沒(méi)有其他語(yǔ)言需要VM的重要性很重要。

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

[[384034]]

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

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

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

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

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

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

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

  1. eg: int a = 10

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

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

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

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

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

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

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

直到下一次…

和平了!

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

 

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2009-06-03 15:52:34

堆內(nèi)存棧內(nèi)存Java內(nèi)存分配

2011-07-15 01:10:13

C++內(nèi)存分配

2010-09-25 14:12:50

Java內(nèi)存分配

2015-11-16 11:22:05

Java對(duì)象內(nèi)存分配

2023-11-21 08:03:43

語(yǔ)言架構(gòu)偏移量

2015-07-08 10:51:27

Objective-CRuntime

2010-09-17 16:14:22

Java內(nèi)存分配

2023-03-06 00:13:58

IOT內(nèi)存物聯(lián)網(wǎng)

2021-12-22 06:56:07

STM32C語(yǔ)言內(nèi)存

2021-12-16 06:52:33

C語(yǔ)言內(nèi)存分配

2018-02-08 14:57:22

對(duì)象內(nèi)存分配

2010-09-25 15:40:52

配置JVM內(nèi)存

2011-07-11 18:02:50

java

2011-07-11 18:10:28

java

2010-09-25 14:38:18

Java內(nèi)存分配

2011-08-16 15:13:49

IOS編程內(nèi)存

2021-07-14 10:00:32

Python內(nèi)存測(cè)量

2018-04-08 08:45:53

對(duì)象內(nèi)存策略

2010-09-09 10:09:07

Java內(nèi)存分配

2020-10-21 09:28:25

JS變量的內(nèi)存分配
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 超碰97免费在线 | 国偷自产av一区二区三区 | 好姑娘高清在线观看电影 | 国产精品99久久久久久www | 成人国产在线观看 | 国产精品视频专区 | 欧美日韩a| 国产91久久精品一区二区 | 在线91| 欧美伊人久久久久久久久影院 | 欧美视频在线播放 | 久久亚洲一区二区三区四区 | 亚洲精品乱码久久久久久按摩 | 中文字幕欧美一区 | 午夜一区二区三区在线观看 | 中文字幕久久精品 | 久久久国产一区二区三区 | 欧美三级在线 | 欧美aⅴ| 久久久精品一区二区 | 欧美精品一区二区三区四区 在线 | 国产精品一区二区三区在线 | 婷婷亚洲综合 | 亚洲精品一区二区三区四区高清 | 日本精品视频在线观看 | 国产精品美女久久久久久免费 | 欧美一二精品 | 中文字幕在线不卡 | 国产一级片一区二区 | 国产精品久久久久久久久免费樱桃 | 国产精品一区二区在线免费观看 | 欧美日韩一区二区三区视频 | 亚洲综合电影 | 日韩成人在线观看 | 中文字幕一区二区三区在线观看 | 午夜爽爽男女免费观看hd | 日本一区二区三区在线观看 | 人人草天天草 | 欧美一区二区在线观看 | 日韩免 | 青青草原综合久久大伊人精品 |