1. 程式人生 > >Java基礎筆記3——package、垃圾回收機制、JVM

Java基礎筆記3——package、垃圾回收機制、JVM

Java基礎筆記3

定義包用package,導包用import。
package語句只有一個,而且必須放在整個java檔案首行。
表示萬用字元,可以匯入當前包下的所有類。
//表示匯入了java包下的util包下的所有的類,但是不包括util的子包中的類
import java.util.
;
java——原生包
java.util——java工具包,提供了很多能夠便捷操作的資料的方式。
java.lang——java核心包,包含了一個java程式能夠執行的一些基本類。程式在啟動的時候會首先預設載入java.lang包。
java.applet——GUI——graph util information圖形使用者資訊
java.math——數學工具包
java.sql——和資料庫互動的包

java.io——用於資料的傳輸
java.nio——高併發
java.net——網路通訊
java.text——格式化
javax——擴充套件包
org——第三方廠商提供的包
垃圾分代回收機制
針對堆記憶體。
堆記憶體劃分為:新生代和老生代。新生代又劃分為伊甸園區和倖存區。
一個物件剛建立的時候放入伊甸園區,在伊甸園區經過依次掃描,如果這個物件依然存在,則挪到倖存區。在倖存區經過多次掃描後挪到老生代。老生代的掃描頻率要遠低於新生代。所以老生代回收可能會導致程式的卡頓甚至崩潰。
發生在新生代的回收稱之為初代回收。——minor gc
發生在老生代的回收稱之為完全回收。——full gc

java為了防止記憶體問題,所以將各種資料型別的大小固定,因此導致一旦出現記憶體問題,程式設計師無法處理。int型別的大小不超過4個位元組。
1)垃圾回收器(Garbage Collection,GC)是JVM自帶的一個功能,用於回收沒有任何引用指向的物件。Java程式設計師不用擔心記憶體管理,因為垃圾收集器會自動進行回收管理。
2)GC判斷物件是否可以回收的依據是該物件是否有引用指向,因此,當確定該物件不再使用時,應該及時將其引用設定為null。
3)GC的回收對程式設計師來說是透明的,並不一定一發現有無引用的物件,就立刻回收。
一般情況下,當我們需要GC即刻回收無用物件時,可以呼叫 System.gc()方法。
System.gc() 用於建議虛擬機器馬上排程GC執行緒回收資源。
注意點:GC的回收是不定時的,但是有一種情況,GC一定是執行.當記憶體不足時。
回收機制
Mark-Cleaning:先找到無用的物件,然後將物件標記,最後清理標記的物件—清理相對較快,但是會產生記憶體的碎片化
Copying:將記憶體分為兩塊,使用其中的一塊,如果要回收,就將不需要回收的物件挪到另一塊去,然後重建要回收的這一塊區域 — 不會產生記憶體的碎片化,但是耗費記憶體並且耗費時間
Mark-Sweeping:既能保證清理速度又能保證記憶體不會產生碎片化
jdk1.7採取的回收器是G1回收,G1回收演算法針對新生代和老生代採取不同的回收機制。
JVM的一些執行引數
棧記憶體(Stack):執行程式碼塊—計算—每一個執行緒獨有
堆記憶體(Heap):儲存物件 — 被所有執行緒共享的
新生代(Young Generation):伊甸園區(eden)和倖存區(Survivor)
老生代(Old Generation)
持久代(Permanent)/方法區(Method Area):儲存—被所有執行緒所共享的
靜態常量池:儲存類資訊 — 位元組碼
執行時常量池:字面量(數值、字元、字串、邏輯值和null)和自定義常量
本地方法棧(Native Stack):執行本地方法(native)—每一個執行緒獨有的
暫存器/PC計數器(programming counter):用於儲存和排程執行緒中的指令—每一個執行緒都都有一個PC計數器
所有的棧所佔用的記憶體不能超過實體記憶體的1/3或者是2G
堆記憶體所佔用的大小不能超過實體記憶體的1/4或者是2G
-… 標準引數
-X… 非標準引數
-Xss 用於限制棧記憶體大小的
-Xss128K 表示棧記憶體是128K
-Xms 表示堆記憶體分配的初始大小
-Xms5M 表示堆記憶體初始大小是5M
-Xmx 限制堆記憶體的最大佔用大小
-Xmx10M 表示堆記憶體最大是10M
-Xmn 限制新生代的大小
擴充套件引數 -XX:
-XX:+PrintGC
-XX:+PrintGCDetails
記憶體
棧記憶體:執行程式碼。每一個執行緒所獨有。
堆記憶體:儲存物件。劃分:新生代、老生代。所有執行緒共享。
方法區:儲存類資訊。劃分:①靜態常量池:儲存類資訊 ②執行時常量池:儲存字面量和自定義常量。所有執行緒共享。
本地方法棧:執行本地方法。每一個執行緒所獨有。
暫存器:用於控制程式的執行指令。每一個執行緒所獨有。