java java不能编译成ABI的模式,所以要编译成类似于opcode的字节码的形式才能运行{bytecode:字节码} 字节码不是二进制,
所以需要特别的解释器才可以运行,即JVM
包含四个独立又彼此相关的技术
java程序设计语言
java API
java class 文件格式(需要运行在jvm上,java程序编译出来的字节码模式遵循那种规范需要java class来定义)
JVM:java virtual machine{bytecode
即java程序设计语言结合API开发出来原程序编译成(java complier编译器)类文件在jvm上运行,
java成勋设计语言+API开发出来1.java-------->编译java complier------------>1.class
JVM的实现方式:(将字节码转换成二进制)
1.一次性解释器,解释字节码,并执行
2.即使编译器(依赖于更多内存缓存解释结果)
3.自适应编译器,(自动进行缓存执行频率比较高的代码)缓存20%左右的代码,提供80%的速度
JVM: Hotspot JVM
(SAN)名字叫做jre 即java running engi(运行)jdk 即java开发环境=JVM+JAVA SE API jdk包含jre(开发+运行)=JAVA+API+JVM,是用于java程序开发的最小环境。
JVM: OpenJDK (Oracle (开发+运行+开源)
JAVA技术分为三类,
JAVA SE Standard Edition
JAVA EE Enterprise Edition
JAVA ME Mobile Edtion
CGI: common gateway interface
作用:让用户访问某一种资源的时候,触发服务器,调用一种程序来处理请求
mime,通过html 或http协议转换成文本格式再换成原来的程序
假如用户请求a.cgi的网页,服务器调用一种程序将a.cgi转换成html返回跟客户端
Servlet:以java语言实现的CGI技术
MVC:实现页面,数据,业务分离
JSP:是servlet上的特殊类,java server page 可以实现html和jave共同嵌套
jasper----》servlet----》JVM----》html
.jsp---------.java----------.class
JSP执行效率比php高
Servlet container:servlet容器,接受用户发送的.cgi程序,负责源程序是否发生改变,
web container:
JVM虚拟机在运行时数据区域
程序计数器:用来保存java代码执行在那个地方了(是每线程独有的)
java虚拟机栈:栈是用来保存本地变量,(每线程独有的)
线程共享内存区
方法区:
堆:就是实例出来的对象,所谓的程序溢出就是实例化出来的对象太多,导致内存不够用,就会溢出,
像java这种高级语言有java回收器,
本地常量区
本地方法站:
引用计数器:垃圾回收器根据进程的引用次数,当引用次数为0的时候,贴上标签
此对象已死,然后过一段时间垃圾回收站来回收
垃圾回收算法:新生代对象,老龄化对象
1.标记+清除,会产生碎片
2.复制 每一个对象在存储的时候,存两份,一个真正存数据,一个空闲着,用的时候存数据
3.标记整理算法 当不用的时候我们移动到另外一端,
垃圾回收器:
serial 一次只能回收一个垃圾,效率比较低,之后出生了并行的回收器,名字叫parnew,能够实现多线程回收(多颗cpu才可以)
Parallel Scavenge 吞吐量比较高,类似于ParNew,优点是收集垃圾占用时间少
Parallet old 多线程
CMS:并行标记清除器,concurrent mark sweep,标记清楚算法,并发收集,低停顿,吞吐量高 清除垃圾占用虚拟机的时间很短
缺点:无法清除浮动垃圾,指的是正在运行的进程产生的垃圾
由于基于标记,清除会产生碎片
Java配置参数:
-xx:+option:开启此参数的功能
-xx: -option:关闭参数
类的生命周期,
加载,loading
验证,verification 文件格式验证,字节码验证
准备,preparation
解析,resolution
初始化,initilization
使用,using
卸载,unloading
Sun JDK监控和故障处理工具
jps,jvm process status tool:显示指定系统内所有的hotspot虚拟机进程的列表信息
jstat,jvm statistics monitoring tool,收集并显示hotspot虚拟机各方面的运行数据
jinfo,现实虚拟机配置信息 jinfo -h
jmap:生成某hotspot虚拟机的内存转储快照,调试的时候才可以用到
可视化工具:
jconsole:java的监视与管理控制台
jvisualvm: