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 和属性文件 图形编 ...
随机推荐
- 自己动手写http服务器——主程序(三)
功能:目前只支持对资源的访问. 使用的模型:多线程加epoll,与传统的一个连接请求一个线程处理不同的是,这个模型只为那些需要服务的连接请求调用线程进行处理, 整个模型的大致流程 创建一个线程持对象, ...
- Android用户登录机制安全性的一些思考
1 client要做到安全存贮数据非常难,通过反编译和强攻.仅仅要有心,差点儿都能够破解. 2 服务端相对安全. 3 结合以上两点,推出能做的点是控制灾难规模.每次破解一个client仅仅能针对 ...
- OSChinaclient源代码学习(1)--Android与Server的交互
这里主要针对"综合"这个选项卡下的"资讯"模块为样例.对核心代码进行解读. 准备工作:參考我的另外一篇博客 http://blog.csdn.net/csp27 ...
- FTP命令具体解释(含操作实例)
以下是微软命令行FTPclient命令大全.假设你想使用"未加工(RAW)"FTP命令而非以下翻译过的请參考:http://www.nsftools.com/tips/RawFTP ...
- [hdu 4869](14年多校I题)Turn the pokers 找规律+拓欧逆元
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 自学Zabbix3.5-监控项item
itemItems是从主机里面获取的所有数据.通常情况下item为监控项,一般网络设备.服务器加入了zabbix监控,就需要监控它的cpu负载,那么实现这个方法的东西就叫item. 1. item构成 ...
- 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript> —— KYLE SIMPSON 在JS的面向 ...
- MyBatis:lazy loading
懒加载的原理 mybatis 会循环处理结果集中返回的每行数据的,在处理之前首先会通过反射调用构造方法来创建 result 对象,结果集中的一行数据最终会映射为一个 result 对象(严格的来说是不 ...
- 八张图学通JavaScript 转自52
- 关于《ASP.NET MVC企业级实战》
大家好,我的书<ASP.NET MVC企业级实战>已经出版啦,感谢大家过去的关注与支持!前言部分,出版的时候漏了部分内容,我这里将其贴出来. 本书提供源码和教学PPT课件!(源码在书中第3 ...