1. 程式人生 > >Java基礎之數組隊列及Java堆外內存學習筆記[圖]

Java基礎之數組隊列及Java堆外內存學習筆記[圖]

may memory 首地址 連續 obj object 取數 組隊 維數

Java基礎之數組隊列及Java堆外內存學習筆記[圖]
1.數組
1.1 數組基本概念:
數組是一個容器,可以存儲同一數據類型的N個數據;數組是一個數據結構,是數據結構中訪問速度最快的;
數組是直接通過下標進行定位;
數組是屬於引用數據類型(數組名中存儲的是內存首地址);數組本身只有有length屬性(獲取數組能存儲的數據個數),但是有從Objuect父類繼承的屬性和方法。
1.2數組在內存中的存儲:
數組在內存中是一個連續的存儲空間;一維數組、二維數組....
1.3數組排序:堆排序
2.數組隊列
利用數組這個數據結構,來實現多個數據的類。數組在定義的時候要定義類型和大小,定義完後不能修改(不能動態改變大小和數據類型)。
存儲數據的個數是會根據實際情況進行變化,但是數組大小無法改變。
不確定要存儲的個數:
數組定義大了,數據小了,浪費空間;數組定義小了,數據多了,越界、存儲不下。要滿足上述兩種要求,利用數組名中存儲的是數組對象在堆內存中的首地址。存儲數據類型,在單獨某一個程序使用中是不會存在太大問題。

技術分享圖片

數組隊列是否能夠通用,數據類型。Object是所有類的父類:Java中所有基本數據類型都由對應一個類,其父類為Object。
如果要求數組中只能存儲某一種數據類型;如果要求數組中可以存儲任何數據類型。要滿足上述兩種要求,只能使用Java泛型。
泛型不是數據類型,是一種特殊的符號,用於泛指Java中任意一種引用類型。在編寫數組隊列(提供的插件類),不確定之後要存儲的數據類型,則只能使用泛型的表示。泛型在此處只是一個占位符,之後在使用中。
Java堆外內存:
1. 首先了解堆內內存on-heap memory
這裏寫圖片描述
2. 定義:off-heap memory
堆外內存就是把內存對象分配在Java虛擬機的堆以外的內存。這些內存直接受操作系統管理(而不是虛擬機),我們仨讀後感

心得體會及感悟,這樣做的結果就是能夠在一定程度上減少垃圾回收對應用程序造成的影響。
3. 特點
1、減少了垃圾回收
因為垃圾回收會暫停其他的工作。
2、加快了復制的速度
堆內在flush到遠程時,會先復制到直接內存(非堆內存),然後在發送;而堆外內存相當於省略掉了這個工作。
4. 堆外內存的管理:DirectByteBuffer
DirectByteBuffer類是在Java Heap外分配內存,對堆外內存的申請主要是通過成員變量unsafe來操作;
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024*128);
5. 其他
System.gc使用-XX:+DisableExplicitGC可以禁掉;
通過-XX:+ExplicitGCInvokesConcurrent也可以做並行gc;
最常見的場景是RMI/NIO下的堆外內存分配等;

Java基礎之數組隊列及Java堆外內存學習筆記[圖]