欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java對象創(chuàng)建內(nèi)存案例解析

 更新時間:2021年08月03日 09:44:08   作者:小炭在努力  
這篇文章主要介紹了Java對象創(chuàng)建內(nèi)存案例解析,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

Java對象創(chuàng)建內(nèi)存圖解析

1. 棧

  • Java棧的區(qū)域很小 , 特點是存取的速度特別快,棧存儲的特點是, 先進(jìn)后出,存儲速度快的原因: 棧內(nèi)存, 通過 棧指針'來創(chuàng)建空間與釋放空間,指針向下移動, 會創(chuàng)建新的內(nèi)存, 向上移動, 會釋放這些內(nèi)存。這種方式速度特別快 , 僅次于PC寄存器,但是這種移動的方式, 必須要明確移動的大小與范圍 ,明確大小與范圍是為了方便指針的移動 , 這是一個對于數(shù)據(jù)存儲的限制, 存儲的數(shù)據(jù)大小是固定的 , 影響了程序的靈活性。 所以我們把更大部分的數(shù)據(jù) 存儲到了堆內(nèi)存中存儲的是:基本數(shù)據(jù)類型的數(shù)據(jù) 以及 引用數(shù)據(jù)類型的引用。

例如:
int a =10;
Person p = new Person();
10存儲在棧內(nèi)存中 , 第二句代碼創(chuàng)建的對象的引用§存在棧內(nèi)存中

2. 堆

  • 堆存放的是類的對象 ,Java是一個純面向?qū)ο笳Z言, 限制了對象的創(chuàng)建方式:所有類的對象都是通過new關(guān)鍵字創(chuàng)建new關(guān)鍵字, 是指告訴JVM, 需要明確的去創(chuàng)建一個新的對象 , 去開辟一塊新的堆內(nèi)存空間,堆內(nèi)存與棧內(nèi)存不同, 優(yōu)點在于我們創(chuàng)建對象時 , 不必關(guān)注堆內(nèi)存中需要開辟多少存儲空間 , 也不需要關(guān)注內(nèi)存占用時長,堆內(nèi)存中內(nèi)存的釋放是由GC(垃圾回收器)完成的垃圾回收器 回收堆內(nèi)存的規(guī)則:當(dāng)棧內(nèi)存中不存在此對象的引用時,則視其為垃圾 , 等待垃圾回收器回收 。

3. 方法區(qū)

方法區(qū)存放的是:

  • 類信息
  • 靜態(tài)的變量
  • 常量
  • 成員方法
    方法區(qū)中包含了一個特殊的區(qū)域 ( 常量池 )(存儲的是使用static修飾的成員)

創(chuàng)建內(nèi)存棧、堆、方法區(qū)圖析

舉個例子如下圖:

在這里插入圖片描述

對象的引用存放在棧中,new創(chuàng)建Book()對象在堆內(nèi)存中開辟了一段內(nèi)存,內(nèi)存都是有地址的假設(shè)為0x123,棧內(nèi)存中存儲了地址,地址指向堆內(nèi)存,獲取了對象Book的屬性name、info,并賦值為"計算機",“計算機書籍”,如圖示:

在這里插入圖片描述

接著BOOK book2 = book1,在棧內(nèi)存中又創(chuàng)建了一個區(qū)域,這個區(qū)域就是book2,也拿到book1的地址,通過book2調(diào)用將name改為"Java",接著在調(diào)用方放say()。整個過程如圖示:

在這里插入圖片描述

結(jié)果如下:

在這里插入圖片描述

  • 方法結(jié)束整個過程完成后,變量對象使用完畢,因為它的作用域就這么大,將會被釋放,book2,book1先后出棧釋放,緊接著堆內(nèi)存的對象沒有任何棧內(nèi)存指向它,最后交給交給GC垃圾回收期處理。

這就是Java對象創(chuàng)建內(nèi)存到釋放內(nèi)存的一個過程。

到此這篇關(guān)于Java對象創(chuàng)建內(nèi)存案例解析的文章就介紹到這了,更多相關(guān)Java對象創(chuàng)建內(nèi)存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring基于注解整合Redis完整實例

    Spring基于注解整合Redis完整實例

    這篇文章主要介紹了Spring基于注解整合Redis完整實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • java項目構(gòu)建Gradle的使用教程

    java項目構(gòu)建Gradle的使用教程

    這篇文章主要為大家介紹了java項目構(gòu)建Gradle的使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java分頁查詢的幾種實現(xiàn)方法舉例

    Java分頁查詢的幾種實現(xiàn)方法舉例

    這篇文章主要給大家介紹了關(guān)于Java分頁查詢的幾種實現(xiàn)方法,分頁是系統(tǒng)中常用到的功能,只要涉及到查詢必定伴隨而來的就是分頁,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Servlet Filter過濾器執(zhí)行順序

    Servlet Filter過濾器執(zhí)行順序

    這篇文章主要介紹了Servlet Filter過濾器執(zhí)行順序的相關(guān)資料,幫助大家更好的理解為什么要用過濾器,感興趣的朋友可以了解下
    2020-12-12
  • Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計

    Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計

    為了解決 本地調(diào)試 的問題,本文實現(xiàn)了一種簡單實用的策略,可以通過 Nacos 動態(tài)配置服務(wù)路由,還可以基于用戶,部門,組織等級別配置服務(wù)路由,實現(xiàn) 本地調(diào)試 的同時,實際上也實現(xiàn) 灰度發(fā)布,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • springmvc集成shiro登錄失敗處理操作

    springmvc集成shiro登錄失敗處理操作

    這篇文章主要介紹了springmvc集成shiro登錄失敗處理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot 如何實現(xiàn)自定義Redis序列化

    SpringBoot 如何實現(xiàn)自定義Redis序列化

    這篇文章主要介紹了SpringBoot 如何實現(xiàn)自定義Redis序列化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中實現(xiàn) SHA-256加密的兩種方式

    Java中實現(xiàn) SHA-256加密的兩種方式

    這篇文章主要介紹了Java中實現(xiàn) SHA-256加密的兩種方式,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • SpringBoot 圖形驗證碼的生成和校驗

    SpringBoot 圖形驗證碼的生成和校驗

    隨著系統(tǒng)和業(yè)務(wù)的不停升級,前后端代碼放在一起的項目越來越臃腫,已經(jīng)無法快速迭代和職責(zé)區(qū)分了,于是紛紛投入了前后端分離的懷抱,發(fā)現(xiàn)代碼和職責(zé)分離以后,開發(fā)效率越來越高了,但是以前的驗證碼登錄方案就要更改了。本文來看一下SpringBoot 圖形驗證碼的生成和校驗
    2021-05-05
  • MybatisPlus實現(xiàn)真正批量插入的詳細(xì)步驟

    MybatisPlus實現(xiàn)真正批量插入的詳細(xì)步驟

    在數(shù)據(jù)庫操作中,批量插入是提升效率的重要手段,MyBatis-Plus提供了多種批量插入方法,但默認(rèn)的saveBatch方法效率并不高,文章介紹了通過手動拼接SQL、使用IService接口以及自定義insertBatchSomeColumn方法進(jìn)行優(yōu)化,以實現(xiàn)更高效的批量插入,并給出了性能優(yōu)化建議
    2024-10-10

最新評論