01-java技術體系基礎

java體系基礎

理論

  1. 編程語言:
  • 系統級: C, C++, go, erlang ...
  • 應用級: C#, Java, Python, Perl, Ruby, php
    • 虛擬機: jvm(java虛擬機), pvm(python的虛擬機)
    • 動態網站: asp, .net, jsp, php
  1. 動態網站:
  2. 客戶端動態: 數據處理在客戶端進行, 早期是這樣實現, 但很是不安全, 如今基本已經廢棄.
  3. 服務器動態: 用CGI協議將要處理的程序轉交給語言運行。
    * CGI的部分實現:
    • webapp server:
      • jsp: tomcat, jboss, jetty
      • php: php-fpm
  4. java編程語言
  • SUN公司開發並開源
  • 做者: James Gosling
  • 項目: Green Project
  • 原名: Oak
  • 改名: 1995年改名爲java, 在SunWorld大會正式發佈Java 1.0版本
  • 特性: Write Once、Run Anywhere, 翻譯過來就是一次編寫, 處處運行。
  • java的歷史
    • 1995: java 1.0
    • 1996: JDK(Java Development Kit, 翻譯java開發工具箱), 包含一個JVM(SUN Classic VM,經典的jvm), 當時的jvm是純解釋運行,因此性能很是低。
    • 1997: SUN發佈jdk 1.1
    • 1997: JDK 1.2
      • SUN把java技術分拆爲三個方向:
        • J2SE: Standard Edition
        • J2EE: Enterprise Edition
        • J2ME: Mobile Edition
      • 表明性技術: EJB, JAVA Plug-in, Swing, JIT編譯器(即時編譯器)
    • 1999:HotSpot虛擬機
    • 2000:JDK 1.3
    • 2002: JDK 1.4, 此時jdk變得很是成熟了
    • 2006: Sun開源了java技術, 遵循GPL規範, 並創建了OpenJDK組織管理此些代碼;
    • 2007: 發佈JDK 1.7, 里程碑
  • java虛擬機: JRockit, HotSpot;
  • Java體系結構:
    • java編程語言
    • Java Class文件格式
    • Java API
    • Java VM
  • java的執行流程:
    • .java: java的源代碼
    • .class: java的類文件, 類文件必須遵循必定的規範, 使得編譯好的文件能在遵循規範的機器上運行, 最終都要在jvm上運行
    • java代碼編譯過程php

      1. 首先 *.java 源碼通過預先編譯後, 會變爲 *.class 文件。
      2. *.class 文件運行若是須要調用其餘的類文件,好比上圖, 1.class, 2.class就會加載進來一塊兒運行。
    • jvm的核心組成部分:
      • Class Loader
      • 執行引擎html

      • 如圖前端

        1. Class Loader, 類加載器先加載須要執行的程序類文件(須要預先編譯好)和Java API的類文件。
        2. 執行引擎就在操做系統上執行Class Loader加載的類文件。
  • Java編程語言的特性:
    • 面向對象、多線程、結構化錯誤處理
    • 垃圾手機、動態連接、動態擴展
    • GC: 垃圾回收器, 主要面向堆內存空間中的垃圾回收
  • 三個技術流派
    • J2SE ==> Java 2 SE, java標準版
    • J2EE ==> Java 2 EE, java企業版
    • J2ME ==> Java 2 ME, java微縮版
  1. jdk 1.5包含的技術
  • Java Language: JAVA語言
  • Dewelopment Tools & APIs: 開發工具和API
    • java: java語言
    • javac: java語言編譯器
    • javadoc: java文檔,支持從程序源代碼中抽取類、方法、成員等註釋造成一個和源代碼配套的API幫助文檔。
    • apt: 源代碼文件進行檢測找出其中的annotation後, 使用annotation processors來處理annotation。而annotation processors使用了一套反射API並具有對JSR175規範的支持。
    • jar: java歸檔命令
  • Deployment Technologles: 部署技術
    • Deployment, 冷部署
    • Java Web Start, 經過web頁面部署
    • Java Plug-in, 經過java插件部署
  • User Interface Toolkits: 用戶接口工具箱
  • Integration Libraries: 集成庫
  • Other Base Libraries: 其餘基本庫
  • lang & util Base Libraries: 語言工具基本庫
  • Java Virtual Machine: Java虛擬機
    • Java Hotspot Client Compiler
    • Java Hotspot Server Compiler
    • jvm支持混合模式, 既是客戶端又是服務端
  • JDK與JRE
    • JDK包含jre, 但jre不包含JDK
    • JRE沒有Java Language和Dewelopment Tools & APIs
    • JRE僅負責運行JAVA代碼
    • JDK調試開發java代碼
  1. JVM運行時區域, 運行爲多線程
  • 方法區: 線程共享, 用於存儲被虛擬機加載的類信息、變量、靜態變量等; 該方法區的變量是持久代的, 也就是隨着進程的生命週期而結束。
  • 堆: java堆是jvm所管理的內存中最大的一部分, 也就是GC管理的主要區域; 主流的算法都基於分代收集方式進行, 新生代和老年代, 線程共享;
  • Java棧:
    • 線程私有, 存放線程本身的局部變量等信息;
    • 線程私有, 生命週期與線程相同, 因此線程啓動就自動爲其建立一個棧, 只不過虛擬機棧描述的是java方法執行內存模型, 說白了就是每一個方法被執行時, 都會給其建立一個棧針, 用於存儲線程本身的局部變量, 操做數, 動態鏈接, 方法出口等等;
  • PC寄存器(Program Counter Register)
    • PC寄存器也稱程序計數器, 這段空間是一段很是小的內存空間, 它的主要做用能夠看做是當前線程所執行字節碼行號的指示器。 例如計算機執行任何一個程序時, 一段代碼有N個指令, CPU取一條指令運行一條指令, 那麼CPU必須有條指針是指向這條指令的, 而這個指針就在CPU的寄存器中, 裏面保留了下一次我應該運行代碼或指令所在內存空間的地址。這段空間就叫指針寄存器; 對於java 而言, 它是運行在虛擬機上的, 因此它須要本身組織一段內存空間, 爲每一個線程在其jvm內部維持其程序計數器。因此說程序計數器是每一個線程都獨佔的。
    • 它是一個很小的內存空間, 裏面保留了當前線程已經運行到的指針的行號(或者下一行)。
    • 線程獨佔的內存空間。
  • 本地方法棧: 用於在哪一個主機上實行的特有方法的, 因此具體的方法是依賴於平臺的。
  • 每一個線程都有本身獨佔的部分, 和共享的部分。
  1. JAVA 2 EE包含:
  • JAVA 2 SE
  • Servlet、JSP、EJB、JMS、JMX、JavaMail
    • Servlet: 用在server端的應用程序, 能夠經過CGI協議或其餘協議與前端進行數據交互。
  • Servlet Contaier工做方式: Servlet容器, Servlet是一個類
    • println('<\h1>')
    • html標籤要硬編碼在應用程序中; 後來出現jsp, jsp就簡化了程序員要硬編碼html的問題。
  • JSP的工做方式:java

    <html>
    <body>
      <h1> .. </h1>
    <%
      內部java代碼
    %>
    </body>
    </html>
    
    # jsp工做在Servlet的前端, 這樣程序員在調用Servlet的時候就不用本身硬編碼寫html了。
    # jsp能讓java代碼內嵌在html中
  • JDK只提供了java 2 SE的標準實現
  • Web Container: 由三部分構成
    • JDK
    • Servlet
    • JSP
    • 其中Servlet和jsp是一種規範, JDK是SUM開源。
  • Web Container的實現
    • 實現: 就是將JDK、Servlet, JSP組織在一塊兒
    • 商業實現:
      • WebSphere: IBM 企業級EE容器
      • WebLogic: (BEA --> Oracle)
      • Oc4j
      • Glassfish
      • Geronimo
      • JOnAS
      • JBoss
    • 開源實現
      • tomcat
      • jetty
      • resin
  • 三種開源實現的對比
    • 對比的版本tomcat 7, Jetty 7, Resin 3.1 - Compiler
    • tomcat:
      1. 能夠作爲獨立的服務器運行。內置web server
      2. 支持遠程部署及管理。
      3. 徹底開源
      4. 編譯全部Jsp, 大約須要8s左右。
    • jetty: 輕量級web容器
    • resin: 高性能J2EE Application server
      • 能夠拿來學習或作開源項目能夠, 但不容許作商業項目
  1. 開源JDK:
  2. Apache Harmony(2011年10月已經中止開發)
  3. OpenJDK
相關文章
相關標籤/搜索