1. 程式人生 > >java技術體系基礎

java技術體系基礎

pri class 開源 永久 存儲 組件 anywhere 通過 實現

編程語言分類

1、系統級:C, C++, go, erlang

2、應用級:C#, Java, Python, Perl, Ruby, php

編程語言的類別:

指令+數據

1、面向過程:以指令為中心,圍繞指令組織數據;

2、面向對象:以數據為中心,圍繞數據組織指令;

虛擬機類型:

1、java虛擬機:jvm

2、Python虛擬機: pvm

開發動態網站的應用框架:

1、asp .net, jsp

思考與引申:

1、如果需要在不同的平臺上都能使用開發好的java程序,需要在不同的平臺上都安裝java虛擬機,用以提供java運行的環境。虛擬機虛擬了主機運行時需要的各種庫,java需要自己的類庫,在這個類庫的環境中運行自己的程序。這個虛擬機系統在不同平臺有不同的版本。



2、如果在其中一種平臺上的庫所提供的API遵循POSIX規範的話,那麽在這個平臺上開發的源代碼,拿到不同的平臺上也是可以編譯運行的。如果在A平臺編譯成二進制程序後,拿到B平臺上是不能運行的,因為它們的ABI不一樣。


動態網站:

客戶端動態:服務器的源代碼在客戶端運行

服務器動態:服務器的源代碼在服務器端運行,通過CGI(通用網關接口)技術實現。

釋義:CGI

運行在前段的web服務器收到來自客戶端的請求後,把請求的uri發送給後端的應用程序服務器,調用應用程序服務器在服務器端 運行以後,把生成的結果返還給客戶端,這種技術稱之為CGI技術。

webapp server:

CGI早期實現都是通過在後面運行一個服務器,我們稱之為webapp server,基於不同的框架,需要在後臺安裝不同的服務程序。

jsp: tomcat, jboss, jetty

註:tomcat服務可以和前端的html服務器進行交互,交互成可以使用http協議或專用的CGI協議

php: php-fpm



Java編程語言的歷史發展:

SUN, James Gosling, Green Project, Oak, Java, SunWorld

1995: Java 1.0, Write Once, Run Anywhere 註:一次編寫,到處運行

1996: JDK (Java Development Kit),包含一個JVM(Sun Classic VM)

JDK 1.0: JVM, Applet, AWT

1997:JDK 1.1 註:JDK java開發工具箱

JAR文檔格式、JDBC、JavaBeans

1998:JDK 1.2

Sun把Java技術分拆為三個方向:Java 2

J2SE: Standard Edition

J2EE:Enterprise Edition

J2ME:Mobile Edition

代表性技術:EJB, Java Plug-in, Swing,

JIT編譯器: Just In Time,即時編譯器

2000:JDK 1.3

1999:HotSpot虛擬機 註:java虛擬機技術,起初由sun公司收購所得

2002:JDK 1.4


2006年,Sun開源了Java技術;遵循GPL規範;並建立了OpenJDK組織管理此些代碼;


虛擬機:JRockit, HostSpot;



Java體系結構

Java編程語言; 註:編寫java程序的源代碼

Java Class文件格式; 註:編譯的中間代碼為字解碼,只能在java虛擬機上運行

Java API; 註:在運行時調用java API中的代碼所實現的功能

Java VM; 註: java API + java VM 被成為java平臺


JVM的核心組成部分:

Class Loader 註:類加載器,加載已經編譯好的類文件和其它所依賴的類文件

執行引擎 註:執行引擎是使用C語言研發的,最終java還是要用到標準c庫和系統調用。


思考與引申:其實java虛擬機只是一個中間層,它最終還是需要通過執行引擎在本地平臺上執行,所以java的API只是一個翻譯官



Java編程語言的特性:

面向對象、多線程、結構化錯誤處理

垃圾收集、動態鏈接、動態擴展


三個技術流派:

J2SE ==> Java 2 SE

J2EE ==> Java 2 EE

J2ME ==> Java 2 ME

技術分享圖片


JAVA虛擬機執行java程序的過程

技術分享圖片

JVM運行時區域:運行為多個線程

方法區:線程共享;用於存儲被虛擬加載的類信息、常量、靜態變量等;永久代;

堆:Java堆是jvm所管理的內存中最大的一部分;也是GC管理的主要區域,主流的算法都基於分代收集方式進行:新生代和老年代;線程共享

Java棧:線程私有,存放線程自己的局部變量等信息;每個線程都有自己的棧,存取局部變量等信息

PC寄存器(Program Counter Register),線程獨占的內存空間;註:也稱為程序計數器,執行字解碼的行號的解釋器

本地方法棧:


技術分享圖片



JAVA 2 EE 虛擬機技術包含的子技術:

JAVA 2 SE

Servlet, JSP, EJB, JMS, JMX, JavaMail 註:這些都是專用的類


Servlet Contaier:註:擁有了jsp和servlet這兩個組件,我們稱之為servlet container

html標簽要硬編碼在應用程序中


JSP:註:可以理解為是Servlet的前段程序,jsp能把以下內容轉化為Servlet格式

<html>

<body>

<h1>...</h1>

<%

%> 註:java代碼放在兩個%之間


</body>

</html>

小結:JSP是java中的一個特殊類庫,默認並沒有被JDK包含,JDK只提供了JAVA 2 SE的標準實現,如果我們想以網頁方式進行運行,我們必須保證JAVA代碼能夠輸出html標簽,為了便於這些開發,sun公司專門提供了一個規範,叫Servlet規範,基於這種規範,應用程序可以以http或CGI格式的方式來接受用戶的請求,以通用的cgi或者http協議能理解用戶的http請求,能分析請求,並且能夠把用戶的請求在本地調用JDK處理以後,構建cgi或http的響應報文,響應給客戶端,這種技術就是Servlet技術。html需要內嵌java代碼,這就是jsp技術。

jsp工作在servlet的前段,接受用戶請求,它可以把請求翻譯成Servlet格式,



Web Container:同時提供JDK, Servlet, JSP

Web Container的實現:

商業實現

WebSphere(IBM)

WebLogic (BEA --> Oracle)

Oc4j

Glassfish

Geronimo

JOnAS

JBoss


開源實現

Tomcat

jetty

resin






java技術體系基礎