01-java技术体系基础
2017-08-08 08:02
232 查看
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
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代码编译过程
首先
*.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
相关文章推荐
- 零基础如何掌握Java技术体系语言特…
- java基础 绘图技术.坦克大战 之java绘图坐标体系(一)
- java技术体系基础
- java技术体系基础
- java技术体系基础
- java基础 绘图技术.坦克大战 之java绘图坐标体系(二)
- java技术体系基础
- 黑马程序员 14 Java基础教学 - 14 - IO体系总结01
- 37 java技术体系基础、tomcat核心概念及使用初步、tomcat配置与应用
- 【《深入解析Java Web技术内幕》学习思维导图】第7章 JVM体系结构与工作方式
- JAVA技术体系发展路线
- [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
- Java基础基础知识复习(输入输出流)-01
- 【Java基础知识】继承体系中的成员关系,this,super关键字的使用,数据初始化
- Java高手真经为您规划Java技术体系
- 黑马程序员--java 基础-----01
- Java语言基础01
- Java基础-01运行的环境及变量的定义
- 黑马程序员_java基础学习笔记01_变量,数据类型,运算符
- 黑马程序员_java_基础_面向对象01