01-java技术体系基础
java体系基础
理论
- 编程语言:
- 系统级: C, C++, go, erlang ...
- 应用级: C#, Java, Python, Perl, Ruby, php
- 虚拟机: jvm(java虚拟机), pvm(python的虚拟机)
- 动态网站: asp, .net, jsp, php
动态网站:
客户端动态: 数据处理在客户端进行, 早期是这样实现, 但非常不安全, 现在基本已经废弃.
服务器动态: 用CGI协议将要处理的程序转交给语言运行。
* CGI的部分实现:- webapp server:
- jsp: tomcat, jboss, jetty
- php: php-fpm
- webapp server:
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编译器(即时编译器)
- SUN把java技术分拆为三个方向:
- 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代码编译过程
- 首先
*.java
源码经过预先编译后, 会变为*.class
文件。 *.class
文件运行如果需要调用其他的类文件,比如上图,1.class
,2.class
就会加载进来一起运行。
- 首先
jvm的核心组成部分:
Class Loader
执行引擎
如图
- Class Loader, 类加载器先加载需要执行的程序类文件(需要预先编译好)和Java API的类文件。
- 执行引擎就在操作系统上执行Class Loader加载的类文件。
- Java编程语言的特性:
- 面向对象、多线程、结构化错误处理
- 垃圾手机、动态链接、动态扩展
- GC: 垃圾回收器, 主要面向堆内存空间中的垃圾回收
- 三个技术流派
- J2SE ==> Java 2 SE, java标准版
- J2EE ==> Java 2 EE, java企业版
- J2ME ==> Java 2 ME, java微缩版
- 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代码
- JVM运行时区域, 运行为多线程
- 方法区: 线程共享, 用于存储被虚拟机加载的类信息、变量、静态变量等; 该方法区的变量是持久代的, 也就是随着进程的生命周期而结束。
- 堆: java堆是jvm所管理的内存中最大的一部分, 也就是GC管理的主要区域; 主流的算法都基于分代收集方式进行, 新生代和老年代, 线程共享;
- Java栈:
- 线程私有, 存放线程自己的局部变量等信息;
- 线程私有, 生命周期与线程相同, 所以线程启动就自动为其创建一个栈, 只不过虚拟机栈描述的是java方法执行内存模型, 说白了就是每个方法被执行时, 都会给其创建一个栈针, 用于存储线程自己的局部变量, 操作数, 动态连接, 方法出口等等;
- PC寄存器(Program Counter Register)
- PC寄存器也称程序计数器, 这段空间是一段非常小的内存空间, 它的主要作用可以看作是当前线程所执行字节码行号的指示器。 例如计算机执行任何一个程序时, 一段代码有N个指令, CPU取一条指令运行一条指令, 那么CPU必须有条指针是指向这条指令的, 而这个指针就在CPU的寄存器中, 里面保留了下一次我应该运行代码或指令所在内存空间的地址。这段空间就叫指针寄存器; 对于java 而言, 它是运行在虚拟机上的, 所以它需要自己组织一段内存空间, 为每个线程在其jvm内部维持其程序计数器。所以说程序计数器是每个线程都独占的。
- 它是一个很小的内存空间, 里面保留了当前线程已经运行到的指针的行号(或者下一行)。
- 线程独占的内存空间。
- 本地方法栈: 用于在哪个主机上实行的特有方法的, 所以具体的方法是依赖于平台的。
- 每个线程都有自己独占的部分, 和共享的部分。
- 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:
- 可以做为独立的服务器运行。内置web server
- 支持远程部署及管理。
- 完全开源
- 编译所有Jsp, 大约需要8s左右。
- jetty: 轻量级web容器
- resin: 高性能J2EE Application server
- 可以拿来学习或做开源项目可以, 但不允许做商业项目
- 开源JDK:
- Apache Harmony(2011年10月已经停止开发)
- OpenJDK
01-java技术体系基础的更多相关文章
- JAVA技术体系发展路线
JAVA技术体系 1.1 Java程序员 ·高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变参数.可变返回类型.增强循环.静态导入 ·核心编程 IO.多线程.实体类.集合类.正则表达式.XM ...
- 简要概括java技术体系
以前一直在学java程序设计语言,学完了就以为自己已经把java学得差不多了,直到最近在看一本书<深入理解java虚拟机>,才发现自己以前学的只不过是冰山一角.相信很多小伙伴跟我一样,在没 ...
- JVM笔记-Java技术体系与JVM概述
1. 简述 Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系. Java 的广告词为 "一次编写,到处运行",之所以能够做到"跨平台&quo ...
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇
背景 之前在<Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析>一文中已经对AAA游戏中过程化植被的需求有了一定的定义,后续工作就是如何用Houdini开发功能 ...
- 深入理解java虚拟机----java技术体系(一)
1.java技术体系 举例: class文件格式:如下图所示,java源代码可以根据不同的编译器可以编译成不同的代码.即可以自定义语言规范比如beanshell,并编写代码; 然后自己编写java编译 ...
- Java 技术体系(JDK 与 JRE 的关系)、POJO 与 JavaBeans
Java 技术体系的分层结构(不同的颜色表示不同的层次),尤其注意 JDK 与 JRE 之间的包含关系: 图见 Java Platform Standard Edition 7 Documentati ...
- Java技术体系 JDK与JRE
从广义上讲,Clojure.JRuby.Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员.如果仅从传统意义上来看,Sun官方所定义的Java技术体系包括以下几个组 ...
- JVM学习之Java技术体系
目录 一.Java技术体系 1.Java体系构成 2.JDK.JRE.JVM之前的关系 JVM介绍 (1)JVM官方文档定义 (2)中文解释 JVM结构 Java代码执行流程 JVM架构模型 1.指令 ...
- Java技术体系图
Java程序员高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变 参数.可变返回类型.增强循环.静态导入 核心编程 ...
- Java 技术体系图
Java 程序员 高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变 参数.可变返回类型.增强循环.静态导入 核心编程 IO.多线程.实体类. 集合类.正则表达式. XML 和属性文件 图形编 ...
随机推荐
- webpack安装配置
webpack安装 1.安装之前你必须要安装node.js,如果你没安装可以在node.js网去下载node.js 2.全局安装webpack,打开cmd输入npm install webpack - ...
- HDU4466 Triangle
题意:给一个长为N的铁丝,问你有几种方法将其划分为若干段,使得每一段都能围成一个边长为整数的三角形,并且围成的三角形都相似 思路其实很明显,三角形的周长必定是N的约数,那么答案就是周长C能围城的三角形 ...
- 十条很实用的jQuery代码片段
本文转自:http://developer.51cto.com/art/201604/509093.htm 作者:核子可乐译来源:51CTO 原文标题:10 jQuery Snippets for E ...
- 2015级C++第4周项目 函数
[项目1-求最大公约数] 參考解答 (1)输入两个数.并求出其最大公约数 #include <iostream> using namespace std; //自己定义函数的原型(即函数声 ...
- clientHeight、offsetHeight、scrollHeight详解
网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...
- Java快速排序算法
快速排序算法思想: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 ...
- 自学Python3.2-函数分类
函数的分类 内置函数,自定义函数,匿名函数 一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html ...
- IntelliJ IDEA 热部署插件 JRebel 安装激活及使用
JRebel对个人用户免费使用,但是要使用Facebook账号把信息完整填写之后才能获取Lisense,登陆Facebook官网二种方案:①修改本地hosts文件:②使用VPNFQ 以下是二种方案的解 ...
- 利用GDAL进行工具开源化改造
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 为利于项目实施,团队用AE写过一个插件式的工具集,主要包括了数 ...
- 数据分析与展示——Pandas数据特征分析
Pandas数据特征分析 数据的排序 将一组数据通过摘要(有损地提取数据特征的过程)的方式,可以获得基本统计(含排序).分布/累计统计.数据特征(相关性.周期性等).数据挖掘(形成知识). .sort ...