對象的建立
虛拟機遇到new指令: 首先先去檢查這個指令的參數是否在常量池中定位到一個類的符号引用,
并檢查這個符号引用代表的類是否被加載、解析和初始化過。
如果沒有,執行相應的類加載;
類加載通過,VM為新生對象配置設定記憶體:記憶體大小在類加載後完全确定。
配置設定方式:指針碰撞--Java堆記憶體絕對規整
空閑清單--ava堆記憶體不規整
Java堆是否規整由所采用的垃圾收集器是否帶有壓縮整理功能決定。
另一個需要考慮的問題:對象建立行為頻繁,僅修改一個指針指向的位置,并發情況下不能保證線程安全?
現象:正在給A對象配置設定記憶體,指針沒來得及修改,B對象同時使用了原來的指針來配置設定記憶體。
解決方案:
第一種:對配置設定記憶體空間的動作進行同步處理--VM采用CAS 配上失敗重試的方式保證更新操作的原子性;
第二種:把記憶體配置設定的動作按照線程劃分在不同的空間之中進行,即每個線程在Java堆中預先配置設定一小塊内 存,稱為本地線程配置設定緩沖(TLAB)。