java对象是如何创建的
虛擬機(jī)遇到一條new指令時(shí),首先將去檢查這個(gè)指令的參數(shù)是否能在常量池中定位到一個(gè)類的符號(hào)引用,并且檢查這個(gè)符合引用代表的類是否已被加載、解析和初始化過。如果沒有,那必須先執(zhí)行相應(yīng)的類加載過程。
在類加載完成后,接下來虛擬機(jī)將為新生對(duì)象分配內(nèi)存。對(duì)象所需內(nèi)存的大小在類加載完成后便可完全確定,為對(duì)象分配空間的任務(wù)等同于把一塊確定大小的內(nèi)存從JAVA堆中劃分出來。劃分內(nèi)存有兩種方式:1、指針碰撞 2、空閑列表。
指針碰撞:如果java堆內(nèi)存是規(guī)整的,所有用過的內(nèi)存在一側(cè),空閑的內(nèi)存在另一側(cè),中間放著一個(gè)指針作為分界點(diǎn)的指示器。分配內(nèi)存就只需把那個(gè)指針向空閑區(qū)域挪動(dòng)一段與對(duì)象大小相等的距離。這種分配方式稱為“指針碰撞”。
空閑列表:但是如果java堆中的內(nèi)存不是規(guī)整的,空閑內(nèi)存和已用內(nèi)存混亂交存在。這個(gè)時(shí)候就無法使用指針碰撞。虛擬機(jī)就必需維護(hù)一個(gè)列表,記錄哪些內(nèi)存卡是可用,然后分配的時(shí)候從列表中找到一塊足夠大(非一樣大)的空間劃分給對(duì)象實(shí)力,并更新到列表上的記錄。這種方式就是“空閑列表”。
?
轉(zhuǎn)載于:https://www.cnblogs.com/ningJJ/p/9134488.html
總結(jié)
以上是生活随笔為你收集整理的java对象是如何创建的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DAO、Service、Controll
- 下一篇: 微信开发工具快捷键