zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    026.MFC_发送消息
    021.MFC_字体和颜色对话框
    020.MFC_文件对话框
    015.MFC_Menu
    qt http get post实现
    openssl error: unrecognized command line option '-m64'
    ModbusTCP协议
    013.MFC_TreeControl
    菱形继承问题以及解决
    ffmpeg
  • 原文地址:https://www.cnblogs.com/cishi/p/7304894.html
Copyright © 2011-2022 走看看