国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入理解JVM:Java使用new創(chuàng)建對象的流程

這篇具有很好參考價值的文章主要介紹了深入理解JVM:Java使用new創(chuàng)建對象的流程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、創(chuàng)建對象的幾種方式

????????①new 對象

????????②反射

????????③對象的復制

????????④反序列化

2、創(chuàng)建對象流程

  1. 先看看常量池里面有沒有,如果有,就用常量池的
  2. 看這個類有沒有被加載過,如果沒有,就執(zhí)行類加載以及類的初始化。(對象的大小,在類加載的時候就確定了)。
  3. 對象在堆內存里面的劃分(2種):

    指針碰撞:假設Java堆中內存是絕對規(guī)整的,所有被使用過的內存都被放在一 邊,空閑的內存被放在另一邊,中間放著一個指針作為分界點的指示器,那所分配內存就僅僅是把那 個指針向空閑空間方向挪動一段與對象大小相等的距離,這種分配方式稱為“指針碰撞”(Bump The Pointer)。

    空閑列表:但如果Java堆中的內存并不是規(guī)整的,已被使用的內存和空閑的內存相互交錯在一起,那 就沒有辦法簡單地進行指針碰撞了,虛擬機就必須維護一個列表,記錄上哪些內存塊是可用的,在分 配的時候從列表中找到一塊足夠大的空間劃分給對象實例,并更新列表上的記錄

    選擇哪種分配方式由Java堆是否規(guī)整決定,而Java堆是否規(guī)整又由所采用 的垃圾收集器是否帶有空間壓縮整理(Compact)的能力決定。因此,當使用Serial、ParNew等帶壓縮 整理過程的收集器時,系統(tǒng)采用的分配算法是指針碰撞,既簡單又高效;而當使用CMS這種基于清除 (Sweep)算法的收集器時,理論上就只能采用較為復雜的空閑列表來分配內存。
  4. jvm構造對象頭信息,new指令之后會接著執(zhí)行構造方法。

    對象頭存放內容:例如這個對象是哪個類的實例、如何才能找到類的元數(shù)據(jù)信息、對象的哈希碼(實際上對象的哈希碼會延后到真正調用Object::hashCode()方法時才 計算)、對象的GC分代年齡等信息。

3、什么時候加鎖

并發(fā)情況下,需要考慮步驟是不是原子性(動作不能再繼續(xù)被拆分了,讀是原子性,寫是原子性,讀加寫就不是原子性),如果不是原子性,一定要加鎖

4、解決并發(fā)下的安全問題

對象創(chuàng)建在虛擬機中是非常頻繁的行為,即使僅僅修改一個指針所指向的位置,在并發(fā)情況下也并不是線程安全的,可能出現(xiàn)正在給對象 A分配內存,指針還沒來得及修改,對象B又同時使用了原來的指針來分配內存的情況。解決這個問題有兩種可選方案:文章來源地址http://www.zghlxwxcb.cn/news/detail-610192.html

  • 一種是對分配內存空間的動作進行同步處理——實際上虛擬機是采用CAS配上失敗 重試的方式保證更新操作的原子性;
  • 另外一種是把內存分配的動作按照線程劃分在不同的空間之中進 行,即每個線程在Java堆中預先分配一小塊內存,稱為本地線程分配緩沖(Thread Local Allocation Buffer,TLAB),哪個線程要分配內存,就在哪個線程的本地緩沖區(qū)中分配,只有本地緩沖區(qū)用完 了,分配新的緩存區(qū)時才需要同步鎖定。虛擬機是否使用TLAB,可以通過-XX:+/-UseTLAB參數(shù)來 設定。

到了這里,關于深入理解JVM:Java使用new創(chuàng)建對象的流程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 深入JVM了解Java對象實例化過程

    深入JVM了解Java對象實例化過程

    new :最常見的方式、 Xxx 的靜態(tài)方法, XxxBuilder/XxxFactory 的靜態(tài)方法 Class的newInstance 方法:反射的方式,只能調用空參的構造器,權限必須是public Constructor的newInstance(XXX) :反射的方式,可以調用空參、帶參的構造器,權限沒有要求 使用 clone() :不調用任何的構造器,要求當

    2023年04月24日
    瀏覽(16)
  • 深入理解 JVM 之——Java 內存區(qū)域與溢出異常

    深入理解 JVM 之——Java 內存區(qū)域與溢出異常

    更好的閱讀體驗 huge{color{red}{更好的閱讀體驗}} 更好的閱讀體驗 本篇為深入理解 Java 虛擬機第二章內容,推薦在學習前先掌握基礎的 Linux 操作、編譯原理、計算機組成原理等計算機基礎以及扎實的 C/C++ 功底。 該系列的 GitHub 倉庫:https://github.com/Doge2077/learn-jvm Java 虛擬機在

    2024年02月09日
    瀏覽(22)
  • [AIGC] 利用 chatgpt 深入理解 Java 虛擬機(JVM)

    [AIGC] 利用 chatgpt 深入理解 Java 虛擬機(JVM)

    Java 虛擬機(JVM)是 Java 編程語言的核心運行環(huán)境,它負責解釋和執(zhí)行 Java 字節(jié)碼。它是 Java 程序能夠跨平臺運行的關鍵,因為不同的操作系統(tǒng)和硬件平臺都有自己的指令集和體系結構,而 JVM 則提供了一個統(tǒng)一的運行環(huán)境,使得 Java 程序可以在不同的平臺上無需修改就能運行

    2024年02月22日
    瀏覽(22)
  • 深入理解Java虛擬機:JVM高級特性與最佳實踐

    Java虛擬機 Java虛擬機(Java Virtual Machine,JVM)是Java語言的核心,是執(zhí)行Java二進制代碼的虛擬計算機。 JVM本身是一個進程,負責解析Java程序并將其轉換為特定平臺可以執(zhí)行的指令集。 通過JVM,Java程序可以實現(xiàn)“一次編寫,到處運行”的特性,使Java具有很強的平臺無關特性。

    2024年02月07日
    瀏覽(30)
  • “深入理解JVM:Java虛擬機的工作原理揭秘“

    標題:深入理解JVM:Java虛擬機的工作原理揭秘 摘要:本文將深入解析Java虛擬機(JVM)的工作原理,包括JVM的組成部分、類加載過程、運行時數(shù)據(jù)區(qū)域、垃圾回收機制等。通過詳細的代碼示例,幫助讀者更好地理解JVM的內部機制。 正文: 一、JVM的組成部分 Java虛擬機是Java語

    2024年02月13日
    瀏覽(24)
  • “深入理解Java虛擬機(JVM):背后的工作原理解析“

    標題:深入理解Java虛擬機(JVM):背后的工作原理解析 摘要:本文將深入探討Java虛擬機(JVM)的工作原理,包括內存管理、垃圾回收、即時編譯器等關鍵概念,以及如何優(yōu)化代碼以提高性能。通過示例代碼和詳細解釋,讀者將對JVM的底層原理有更深入的理解。 正文: 一、

    2024年02月12日
    瀏覽(27)
  • [AIGC] 深入理解 Java 虛擬機(JVM)的垃圾回收

    [AIGC] 深入理解 Java 虛擬機(JVM)的垃圾回收

    一、是什么 Java 虛擬機(JVM)的垃圾回收(Garbage Collection)是一種自動內存管理機制,用于釋放不再使用的對象所占用的內存空間。垃圾回收的目標是回收那些不再被程序引用的對象,以避免內存泄漏和內存溢出等問題。 二、為什么需要垃圾回收 在 Java 程序中,對象的創(chuàng)建

    2024年02月21日
    瀏覽(15)
  • JVM源碼剖析之Java對象創(chuàng)建過程

    JVM源碼剖析之Java對象創(chuàng)建過程

    關于 \\\"Java的對象創(chuàng)建\\\" 這個話題分布在各種論壇、各種帖子,文章的水平參差不齊。并且大部分僅僅是總結 \\\"面試寶典\\\" 的流程,小部分就是copy其他帖子,極少能看到拿源碼作為論證。所以特意寫下這篇文章。 版本信息如下: 首先把總結圖放在這。接下來分析源碼~? 用一個

    2024年02月12日
    瀏覽(22)
  • jvm復習,深入理解java虛擬機一:運行時數(shù)據(jù)區(qū)域

    jvm復習,深入理解java虛擬機一:運行時數(shù)據(jù)區(qū)域

    ? ? ? ? 程序計數(shù)器 (Program Counter Register) 它是程序控制流的指示器,簡單來說,為了線程切換后能恢復到正確的執(zhí)行位置,每條線程都需要有一個獨立的程序計數(shù)器 ? ? ? ? ?Java虛擬機棧 (Java Virtual Machine Stack)也是線程私有的,它的生命周期 與線程相同。虛擬機棧描述

    2024年01月22日
    瀏覽(17)
  • “深入剖析JVM內部機制:理解Java虛擬機的工作原理“

    標題:深入剖析JVM內部機制:理解Java虛擬機的工作原理 介紹: Java虛擬機(JVM)是Java語言的核心組件,負責將Java源代碼轉換為可以在計算機上運行的機器碼。了解JVM的內部機制對于開發(fā)人員來說非常重要,因為它可以幫助我們更好地理解Java程序的運行行為和性能優(yōu)化。本文

    2024年02月12日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包