1、先了解一下PHP
(1)PHP是开发语言,也是运行环境
作为开发语言,PHP属于脚本语言,也属于动态语言
(2)PHP编译过程:
为简化编译过程,引入Zend Engine,编译成opcode,第一次编译第二次就不用编译;但是像Apache,每一个进程都使用一个独立的进程空间,因此第一个进程编译的结果第二个进程无法使用,因此又引入了缓存,像Xcache、APC、eAccelerator。
(3)PHP与C(面向过程)、C++(面向对象)相比较:
PHP具有动态语言和脚本语言的灵活性、便捷性、移植性好
C和C++移植困难、维护成本高,但是高速、性能好,一般用来开发驱动和底层程序等
插入介绍一些linux系统知识:
(1)最底层:System call,系统调用
上一层:API(application programming interface),应用编程接口,有windows api和linux api
再上一层:POSIX(POS全称portable operation system),可移植操作系统,后面的IX是为了兼容linux操作系统的叫法。
POSIX可以实现跨平台编译,POSIX是一种规范。
(2)程序可以跨平台编译,但是不能跨平台运行(因为windows和linux的动态库不一样,windows系统是.so文件,linux系统是.dll文件)。因此,又出现一种叫做ABI的接口,ABI全称是application binary interface,可以拟合不同操作系统的二进制格式。
在linux中,二进制格式是ELF;在windows中,二进制格式是EXE
最后引入java,java的出现就是为了能够在不同的操作系统上运行应用程序
java包含四个独立又彼此相关的技术:
(1)java程序设计语言
(2)jvm(java virtual machine),又叫java虚拟机
(3)java class文件格式
(4)java api
彼此相关:java编程语言结合java api,编译成java class文件格式(字节码),在jvm上运行(name.java–>name.class,还有各种公有类和私有类跑在jvm上)
2、java api
java ee包含多个独立的api,servlet(硬编码)和jsp(.jsp->.java->.class)就是其中的两个,而java ee中著名的api还还包含以下几个:
java ee api:
(1)ehj(enterprise javabeans):java相关的诸多高级功能的实现,如rmi(remote method invocation),对象/关系映射,跨越多个数据源的分布式事务等
(2)jms(java message service):高性能异步消息服务,实现java ee应用程序与非java程序的透明通信
(3)jmx(java management extensions):在程序运行时对其进行交互式监控和管理的机制
(4)jta(java transaction api):允许应用程序在自身的一个或多个组件中平滑的处理错误的机制
(5)javamail:通过工业标准的POP/SMTP/IMAP协议发送和接收邮件的机制
java se api:
jndi(java naming and directory interface):用于与ldap服务交互的api
jaxp(java api for xml processing):用于分析和转换xml
3、介绍jvm
jvm最大的特点:一次编译,到处运行(once for all)
jvm实现方式:
(1)一次性解释器,解释字节码并执行
(2)即时编译器(just-in-time complier),依赖于更多内存缓存解释后的结果
(3)自适应编译器,监控执行频率较高的代码,并将结果缓存下来(二八法则,缓存20%左右的代码,提高80%左右的速度)
jvm分类:
(1)hotspot,sum公司自己的jvm,hotspot又分为两类:
jre:java运行环境,运行(编译)所需;jre=java语言+java se api
jdk:java开发环境(包含jre,是jre的超集),运行(编译)+开发所需;jdk=java语言+java api+jvm,jdk是实现java程序开发的最小环境
(2)openjdk,开源界的jvm
开发+运行的开源实现
java分类(根据java应用领域的不同):
(1)java se:standard edition,标准版本,早期也叫做J2SE
(2)java ee:enterprise edition,企业版本,早期也叫做J2EE
(3)java me:mobile edition,移动版本,早期也叫做J2ME(用的很少)
#2指的是第二版
4、介绍jdk:
(1)jdk包格式
jdk 1.6 update 32(jdk1.6的第32次升级,软件包名称是jdk-1.6.32)
jdk 1.7 update 9(jdk1.7的第9次升级,软件包名称是jdk-1.7.9)
(2)jdk安装方式
rmp包
通用二进制格式
源码编译
(3)命令
yum list all|grep java #查看操作系统自身提供的jdk软件包
java -version #查看java版本
5、介绍jsp
(1)早期的时候,出现了applet这种小程序,用于开发动态网站;applet是开发在客户端运行的应用程序,基于web技术
(2)接着,出现一种叫做CGI(common gateway interface)规范,能够让用户访问某种资源的时候,触发web服务器,调用额外的程序执行。除了CGI规范,java还提供了一种叫做servlet的规范,用来兼容applet和CGI;servlet是开发运行在服务器端的应用程序,基于CGI技术
(3)在servlet的基础上进行升级改造,又引入了jsp(java server page),用来嵌入java语言;jsp将servlet简化,开发者只需要将java程序嵌入到html代码中
#虽然说jsp拜托了servlet的束缚,但是jsp还是要通过Jasper先转换成servlet;jsp框架能够让java以嵌入式代码的方式嵌入到html代码中,从而实现基于java的动态网站开发
6、介绍java类(类库)
有三类:
(1)applet
(2)servlet
(3)jsp
.jsp通过Jasper转换为.java
.java通过jvm转换为.class
7、垃圾回收机制
java程序可以实现自动内存回收,通过GC(gabbage collect)来完成
(1)垃圾回收器:cms(Concurrent Mark-Sweep),cms是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。
(2)cms过程:初始标记、并发标记、并发预处理、重新标记、并发清理、并发重置
(3)cms优缺点:
优点:并发收集、低停顿
缺点:无法收集浮动垃圾,由于基于标记-清除算法,可能会产生碎片
8、java配置参数
-XX:+
9、java工具
sun jdk免费提供给用户监控和故障处理工具:(在jdk安装目录的bin目录下有很多java工具和命令)
(1)jps:java process status tool,显示指定系统内的所有hotspot虚拟机进程的列表信息
(2)jstat:jvm staticstics monitoring tool,收集并显示hotspot虚拟机各方面的运行数据
(3)jinfo:显示正在运行的某hotspot虚拟机配置信息
(4)jmap:生成某hotspot虚拟机的内存转储快照
可视化工具:
(1)jconsole:java的监控和管理控制台
(2)jvisualvm:java虚拟机控制台
#java工具除了sun开源的工具,还有很多商业的工具