突然之間需要學習Java,學校里學的東西早就忘記了,得用最短的時間把Java知識理順,重點還是J2EE,畢竟所有的ava項目中95%都是J2EE,還是先從基礎的J2SE學起吧.......
首先是了解Java的核心機制,Java中有兩種核心機制:
①Java虛擬機(Java Virtual Machine)
②垃圾收集機制(Garbage collection)
一、核心機制之Java虛擬機
① Java虛擬機可以理解成一個以字節碼為機器指令的CPU
② 對於不同的運行平台,有不同的虛擬機
③ Java虛擬機機制屏蔽了底層運行平台的差別,能夠很好的實現跨平台
Java編譯器 執行 |--->JVM for UNIX
源程序(*.java文件)========>字節碼(*.class文件)=========>|--->JVM for Windows
|--->JVM for other
在不同的平台上有相應平台的虛擬機(相當於Java程序是運行在Java准備的虛擬環境中),這樣就保證了Java程序的跨平台性.....
注:由此也可以看出Java是解釋型語言
補充說明:語言類型
①編譯型語言:直接編譯成操作系統可識別的可執行文件,例如C,C++
②解釋型語言:需要首先編譯為.class等字節碼文件后在逐行解釋為操作系統可識別的可執行文件,例如Java
二、核心機制之垃圾收集
Java的內存管理實際上就是對象的管理,其中包括對象的分配和釋放。
分配對象使用new關鍵字;釋放對象時,只要將對象所有引用賦值為null即可。對於GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象,通過這種方式確定哪些對象是“可達的”,哪些對象是“不可達的”,當GC確定一些對象為“不可達”時,GC就有責任回收這些內存空間
GC在JVM中通常是由一個或一組進程來實現的,它本身也和用戶程序一樣占用heap空間,運行時也占用CPU,當進程運行時,應用程序停止運行。
因此,當GC運行時間較長時,用戶能夠感到Java程序的停頓,另一方面,如果GC運行時間太短,則可能對象回收率太低,這意味着還有很多應該回收的對象沒有被回收,這即要求我們在設計GC時要均衡效率。