Chapter 2 軟件開發平臺與軟件系統架構 之 JAVA
JVM的框架結構和解釋執行代碼流程
jvm包括
J2ee 框架
注意LDAP目錄服務協議和JNDI(java名字和目錄服務接口)架構(如對象上傳和下載、目錄搜索),RMI協議(遠程調用),HTTP擴展的SOAP協議(以xml爲中立化信息交換語言),三層(服務層(EJB),中間層,web層...)
Servlet 和 HttpServletRequest, RequestDispatcher(包含其他Servlet或重定向http request URL), HTTPSession(爲無狀態的http協議定義和管理會話機制,該機制跨越HTTP請求完成信息共享),ServletContext(Servlet運行時環境) P91
Java 傳遞參數
傳值和傳地址兩種。注意String一旦修改就會重新申請內存並拷貝,所以String做參數時相當於傳值。
Java 反射機制:
JVM爲每個加載(即類字節碼Load進JVM)的類SomeClass生成一個特別的Class類實例 XXX。
對象SomeClassObj運行時可利用基類Object提供的方法getClass()獲取該特別的實例 XXX; (Class XXX=SomeClassObj.getClass). 另外Class類還提供了靜態函數forName(String),給定類SomeClass的名字,可以返回該類對應的Class類實例XXX。( Class XXX = Class.forName("SomeClass") )
這個特別的Class類可以動態地創建對應的類的實例:XXX.newInstance()將創建XXX對應的類SomeClass的實例。
Java 對象序列化技術
注意JDK/JRE會爲實現了Serializable的類生成一個UID,相當於hash值,用於鑑別一個序列化的對象是不是屬於某類。
Java 線程
Java線程不是內核級別的線程,而是Jvm解釋運行環境自己提供的一種用戶級別線程,所以它對cpu是不可見的。cpu只能看到它所在的jvm進程,後者纔是內核級別線程/進程。
1 繼承Thread。 注意Thread其實實現了Runnable接口; 2 自定義一個類,實現Runnable接口。
Java併發控制(同步)
採用等待喚醒機制,劃分出主(調用notify喚醒從線程)從(調用wait阻塞自己,等待喚醒)線程,優於鎖機制。
wait/notify必須在synchronized(anObj)塊內,意味着執行這些操作前,必須獲得anObj的對象鎖,從而保證這些操作之間的互斥。此外一個線程調用wait時,會釋放anObj的鎖,防止死鎖。從wait返回時,需要再次獲得鎖才能繼續執行。主線程調用notify並退出synchronized塊之後從線程才能真正從wait返回,即被喚醒。