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代码编译过程

      1. 首先 *.java 源码经过预先编译后, 会变为 *.class 文件。
      2. *.class 文件运行如果需要调用其他的类文件,比如上图, 1.class, 2.class就会加载进来一起运行。
    • jvm的核心组成部分:

      • Class Loader

      • 执行引擎

      • 如图

      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的工作方式:
    <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
原文地址:https://www.cnblogs.com/cishi/p/7304894.html