java虛擬機的內存分配主要分類兩部分,線程共享區和線程獨佔區
1、線程共享區
2、線程獨佔區
3、1.8版本虛擬機內存架構調整
4、直接內存和運行時常量池
運行時常量池,就是運行時產生的常量。代碼中直接定義的常量是class字節碼常量,固定的。運行時產生的常量,如拼接字符串,如string.intern() 都是運行時產生的常量。
注意:1.8運行時常量池放在元數據實現
直接內存:是 jdk1.4以後提供的nio模型,其中基於通道的buffer緩衝使用的是虛擬機堆外之外的內存,受到物理內存的限制
1、基本數據類型 數據和引用都存儲在棧中:操作快,但是內存小
2、包裝類 1.5以後提供自動拆箱機制
Java的8種基本類型(Byte, Short, Integer, Long, Character, Boolean, Float, Double), 除Float和Double以外, 其它六種都實現了常量池, 但是它們只在大於等於-128並且小於等於127時才使用常量池
3、string 直接賦值放在常量池中存儲在 stringTable中(類似)
4、數組 無論基本數據類型還是對象 數據均存儲在堆內存中