---恢复内容开始---
JDK=java+API+JVM
JRE=JVM+java SE API
JAVA应用领域:
JAVA SE:Standard Edtion (早期叫J2SE)
JAVA EE : Enterprise Edtion (早期叫J2EE)
JAVA ME : Mobile Edtion (不流行) Android / Object C (火)
1995年,JAVA1.0,James Gosling,Green Project,"Write once ,run Anywhere"
1999年,Hotspot JVM
2006年,Sun 把大部份产品开源包括Java,遵循GPL
2009年,Oracle收购Sun
Java在类库中引用applet,用applet能够为html开发者在页面中提供一个编译好的applet的小程序,只要客户端在浏览器上安装有JRE插件,就能实现applet程序在客户端JVM上运行,由此,客户端动态网站诞生。类似有Active X。但客户端的JRE安装问题,客户端运行程序的安全性,然后CGI(common gateway interface)技术诞生。
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
Servlet:Java特殊类实现的CGI方式,增加了对httpd协议处理能力,理解httpd协议和html处理,但跟CGI一样,任何静态内容还是在JAVA程序中生成,最终有了MVC
MVC:数据,业务,展示分离;
php可以将php代码镶嵌到html中,<?php>
jsp(Java server page)同理<%language="java">
SSH:Structs(MVC框架),Spring,Hebernate
jsp运行时先通过Jasper转化成Servlet,而后用JAVA编译器编译成类
因为jsp(JAVA)技术久,代码规范,对大型,稳定性、性能要求高的站点还是优先jsp,php确实方便
JSP:让程序员能够在html代码中嵌入java代码从而实现动态站点。
applet,servlet,Java是用于使用在不同场景下的java类库
.jsp(Jasper) - .java(JDK,Java编译器,javac) - (JVM) .class
Servlet Container:包含了JDK,能让Servlet工作起来的额外组件,
JVM instance : Servlet Container / Web Container /
并发:php通过fastcgi技术,每个请求启动一个php进程;java启动和撤销一个JVM instance代价比php要大很多很多,所以java在每个JVM instance启动多线程;
线程私有内存区:程序计数器、JAVA虚拟机栈
线程共享内存区:方法区、java堆(java可以自动实现内存回收GC-garbage collector)
其中堆区域最可能出现内存溢出
垃圾回收算法:
1、标记-清除(有个弊端会产生碎片)
2、复制算法(避免碎片,但浪费空间)
3、标记-整理,复制算法的改进(避免内存碎片)
标记:把类标记为新生代和老龄化
垃圾回收器:
Serial 能完成对新生代的回收,一次只收一个垃圾
ParNew 实现多线程回收,只是Serial改进版本,需求多CPU
Parallel Scavenge 跟New差不多,比New吞吐量多点儿,降低回收垃圾所占的cpu时间
Serial Old
Parallel Old
CMS:Concurrent Mark Sweep 并行标记清除,标记清楚算法,特点:实现并发收集、低停顿;缺点:无法收集浮动垃圾(只要线程处在,就无法收集),基于标记清除算法可能产生碎片
G1:garbage first ,较改进:不会产生碎片;能够精确控制停顿(停顿时间用户可以定义)
实际中,垃圾回收器可以自己去定义,JAVA虚拟机的运行状况要随时监控!
JDK通常使用sun的,版本选择按照需求来定(java程序员)
安装JDK:
rpm:下载地址http://www.oracle.com/technetwork/java/archive-139210.html
rpm -ivh jdk-xxxx
vi /etc/profile.d/java.sh
#!/bin/bash
JAVA_HOME=/usr/java/jdk1.8.0_121/
PATH=$JAVA_HOME:$PATH
export PATH JAVA_HOME
. /etc/profile.d/java.sh
源码