菜鸟学Linux 第100篇笔记 tomcat 之 java




内容总览

java概述

java  包含四个独立却又彼此相关的技术

四个独立的技术运作流程

JVM的实现方式

JVM的虚拟机软件

JAVA应用领域的不同,Java可分为三类 SE, EE, ME

CGI (Common Gateway Interface)

servlet CGI (JSP)

JVM 虚拟机运行时内存空间

类加载器、类的生命周期

jdk的安装

java配置参数

Sun JDK监控和故障处理工具

可视化工具 gui




tomcat 

PHP:

开发语言:脚本语言

运行环境:解释执行

Zend Engine: Opcode

Xcache, APC, eAccelerator

MVC (model view controller)

data数据

bussiness:业务

presentation:展示


C/C++ cpu, os

移植困难

维护成本高


高速

驱动


C: 面向过程

C++ 面向对象


C API (Application Programming Interface)

os, system call

api


windows, api

linux, api

POSIX: Portable Operating System


ABI: Application Binary Interface



oak: 橡树

java能够在不同的硬件平台上运行同一种语言所开发出来的程序

全球最流行语言


java  包含四个独立却又彼此相关的技术

java程序设计语言

Java API

Java Class文件格式 (运行在jvm上) bytecode: 字节码

JVM:Java Virtual Machine


Once for all 一次编译到处运行 Write Once, Run anywhere


四个独立的技术运作流程

使用java程序设计语言结合Java API所提供的库编写出来的原程序,由编译器编译成Java 

Class文件格式最后将此文件在jvm上运行



JVM

提供公共类和私有类

class loader


JVM的实现方式

1. 一次性解释器,解释字节码并执行。

每次执行时还需要再进行编译才可执行,此次的编译则是将字节码编译成不同的硬件和软件

平台可以识别的执行程序

2. 即时编译器(just-in-time complier)

依赖于更多内存来缓存解释器解释后的结果

3. 自适应编译器

优化程序缓存的代码,缓存20%左右的代码,提高80%的速度



Java设计语言: Sun

Java API: Sun, Java规范开放组织定义的,第三方类库

Java class: Sun



JVM的虚拟机软件

JVM: Hostspot JVM(Sun)

JRE Java Runtime Environment运行时环境 (没有编译只可运行) 

JDK Java Development Kit (开发编译+运行)


JVM: OpenJDK

开发+运行(开源实现)


JDK=Java + API + JVM 用于实现Java程序开发的最小环境

JRE=JVM + Java SE API



JAVA应用领域的不同,Java可分为三类

JAVA SE:Standard Edition, J2SE

JAVA EE:Enterprise Edition, J2EE

JAVA ME:Mobile Edition, J2ME


1995年, JAVA 1.0面世, James Gosling, Green Project

GPL (General Public License)


applet: 小程序 类库 

动态网站


CGI (Common Gateway Interface) 协议和规范,

可以使web服务器额外调用其它应用程序或启动其它进程来执行用户所请求的动态程序类的资源

在本地执行以后,格式化为html文档再返回给客户端的一种技术


servlet CGI

以JAVA语言实现的CGI技术,以java来开发网站,开发必须遵守servlet规范,servlet能够接受

http请求,能够理解http协议,并且能够将html文档的执行结果通过封装成http报文的格式来

响应给客户端的请求


任何一种静态内容都得在java程序中生成,这使java程序开发者必须得懂html


JSP:是servlet的一种特殊类 Java Server Page (可以分离html和java动态)

可以将java的脚本程序嵌入至html文档中

<%language="java">

SSH: Structs, Spring, Hebernate


JSP --> servlet

jasper 将jsp转换成.java

java编译器 负责将.java 编译成 .class



.jsp --> .java --> (JVM) .class


JDK: javac, .java --> .class


Web

Servlet Container: Servlet 容器

web container



JVM 虚拟机运行时内存空间

线程私有内存区

程序计数器区 程序执行状态

java虚拟机栈 保存局部变量

线程共享内存区

本地方法栈

方法区 (类)

堆 (对象区) java自动内存回收 GC (Garbage collector)

垃圾回收算法

1. 标记 清除

2. 复制 (避免碎片,浪费内存)

3. 标记整理


垃圾回收器

Serial

ParNew 并行回收

Parallel Scavenge 降低垃圾回收所需要用的时间

Serial Old 单线程

Parallel Old 多线程


CMS:Concurrent Mark Sweep

并发收集,低停顿

无法收集浮动垃圾,由于基于标记,清除会产生碎片


G1 不会产生碎片,能够精准控制停顿时间



类加载器

jvm提供

外部提供


类生命周期

loading

verification

preparation

resolution

initialization

using

unloading



jdk的安装

从官方网站下载

www.oracle.com download

我这里下载的是jdk-8u121-linux-x64不知道为何没找到之前的版本呵呵 


安装

下载到linux文件夹里 因为是rpm包直接命令rpm命令安装即可

 # rpm -ivh jdk-8u121-linux-x64.rpm


配置环境变量

# vim /etc/profile.d/java.sh

添加如下两行

export JAVA_HOME=/usr/java/jdk1.8.0_121

export PATH=$PATH:$JAVA_HOME/bin


此时使用命令便可查看已经安装好的jdk版本信息

# java -version



java配置参数

-XX:+

-XX:-

-XX:


-D=  set a system property


                 

java -XX:+PrintFlagsFinal  显示所支持的所有参数和其默认值






Sun JDK监控和故障处理工具

jps  JVM process status tool  显示指定系统内所有的hotspot虚拟机进程的列表信息

jstat JVM statistics Monitoring tool 收集并显示hotspot虚拟机各方面的运行数据

jinfo 显示正在运行的hotspot虚拟机配置信息

jmap 生成某hotspot虚拟机的内存转储快照



可视化工具

jconsole  Java的监控与管理控制台

jvisualvm java的虚拟化控制台工具 可视化的vm