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

01-java技术体系基础的更多相关文章

  1. JAVA技术体系发展路线

    JAVA技术体系 1.1 Java程序员 ·高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变参数.可变返回类型.增强循环.静态导入 ·核心编程 IO.多线程.实体类.集合类.正则表达式.XM ...

  2. 简要概括java技术体系

    以前一直在学java程序设计语言,学完了就以为自己已经把java学得差不多了,直到最近在看一本书<深入理解java虚拟机>,才发现自己以前学的只不过是冰山一角.相信很多小伙伴跟我一样,在没 ...

  3. JVM笔记-Java技术体系与JVM概述

    1. 简述 Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系. Java 的广告词为 "一次编写,到处运行",之所以能够做到"跨平台&quo ...

  4. Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇

    背景 之前在<Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析>一文中已经对AAA游戏中过程化植被的需求有了一定的定义,后续工作就是如何用Houdini开发功能 ...

  5. 深入理解java虚拟机----java技术体系(一)

    1.java技术体系 举例: class文件格式:如下图所示,java源代码可以根据不同的编译器可以编译成不同的代码.即可以自定义语言规范比如beanshell,并编写代码; 然后自己编写java编译 ...

  6. Java 技术体系(JDK 与 JRE 的关系)、POJO 与 JavaBeans

    Java 技术体系的分层结构(不同的颜色表示不同的层次),尤其注意 JDK 与 JRE 之间的包含关系: 图见 Java Platform Standard Edition 7 Documentati ...

  7. Java技术体系 JDK与JRE

    从广义上讲,Clojure.JRuby.Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员.如果仅从传统意义上来看,Sun官方所定义的Java技术体系包括以下几个组 ...

  8. JVM学习之Java技术体系

    目录 一.Java技术体系 1.Java体系构成 2.JDK.JRE.JVM之前的关系 JVM介绍 (1)JVM官方文档定义 (2)中文解释 JVM结构 Java代码执行流程 JVM架构模型 1.指令 ...

  9. Java技术体系图

    Java程序员高级特性              反射.泛型.注释符.自动装箱和拆箱.枚举类.可变              参数.可变返回类型.增强循环.静态导入        核心编程       ...

  10. Java 技术体系图

    Java 程序员 高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变 参数.可变返回类型.增强循环.静态导入 核心编程 IO.多线程.实体类. 集合类.正则表达式. XML 和属性文件 图形编 ...

随机推荐

  1. 10.0.0.55训练赛 Writeup

    From LB@10.0.0.55 Misc 0x01 misc100(图片隐写) 首先用binwalk扫了一下,发现没毛病. 然后就搜了一下jpg的文件尾FFD9,如下图,看到了png格式的标志IH ...

  2. 设置Eclipse的workspace路径

    首次启动Eclipse/MyEclipse时, 会弹出"Workspace Launcher"对话框, 提示设置Workspace路径. 设定好路径后, 若勾选了"Use ...

  3. Android酷炫有用的开源框架

    一.代码库 1.from  代码家 整理比較好的源代码连接 一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才開始支持的,ActionBarSher ...

  4. 深入了解MyBatis返回值

    深入了解MyBatis返回值 想了解返回值,我们须要了解resultType,resultMap以及接口方法中定义的返回值. 我们先看resultType和resultMap resultType和r ...

  5. jquery 自定义选择器

    // HTML 代码 <body> <div id="divid1" class="divclass">白色</div> & ...

  6. Office Add-in 架构和入门

    作者:陈希章 发表于2017年7月12日 前言 从2月26日开始写这个Office 365开发概览系列文章-- https://aka.ms/office365devguide,到现在已经有17篇文章 ...

  7. bootstrap插件summernote 的使用

    一.有时Java工程中会用到summernote 编辑器,下面简单说一下引用 1.将summernote 相应的文件放到工程中(webapp下面) 2.建一个jsp文件,在文件中引入相应的js.css ...

  8. Struts2.5 伪静态的配置

    伪静态 伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息.或者还想运用动态脚本解决一些问题.不能用静态的方式来展示网站内容.但 ...

  9. 转:Natas Wargame Level28 Writeup(EBC加密破解)

    From:http://alkalinesecurity.com/blog/ctf-writeups/natas-28-getting-it-wrong/ Now that I knew it was ...

  10. 《C++程序设计语言(英文第四版)》【PDF】下载

    <C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参 ...