所以这四种技术,Java语言是有sun公司开发并且开源了,而JAVAAPI的规范由于开源了,后来演变为由第三方组织定义的,JavaClass的格式规范还是由Sun公司的定义规范的,最后的JVM,sun公司和第三方组织都有提供。
SUN公司提供的JVM,总的叫做HotspotJVM,但具体软件分为如下两种:
JRE java:running环境。
JDK java:开发环境。
第三方提供的JVM是叫做OpenJDK:开源的开发加运行。
JDK可以理解为包含了java代码+JavaAPI+JVM,这是用于实现Java开发的最小环境。JRE只有JVM和Java SE API
Java应用领域不同,Java可以分为三类:
Java SE Standard Edtion j2se
Java EE Enterprise Edition j2ee
Java ME Mobile Edition j2me
Java问世后,人们对动态网站需求越来越大,Java就引入了applet这个技术。这个东西只要HTML网页开发者加入applet这个小程序,用户使用的浏览器装有jre的插件,就可以直接运行。使得动态网站得以实现。但这是客户端动态网站实现方式。
随后CGI技术就诞生了,CGI:common gateway interface 通用网关协议。
html,mime可以将其他格式全都转换成文本格式。
随后Java为了引入类似cgi的技术出现了servlet。servlet:简单说以java语言cgi技术
Servlet技术出现,增加了Java对于http处理能力。但随之又有一个问题产生,所有http请求,都必须转成后端Java程序进行编译运行,这样一来,严重影响了Java的处理性能。而且Java程序员必须还要懂HTML,这样Java返回用户时的HTML格式才能正确。所以就必须使用框架,并且JSP就诞生了。
JSP:java server page,能够嵌入HTML网页的一种技术,为使用mvc框架打下了基础。
SSH框架:Structs,Spring,Hebernate。
JSP ——> Servlet(通过Jasper)
Servlet Container Servlet容器
Web Container Web容器
总的来说就是对JVM的功能进行扩展。所以就是一个jvm instance,那么100个请求怎么实现并行处理?难道启动100个JVM实例来实现吗?一个JVM就是一个进程,但这个进程的创建与撤销代价非常大,资源消耗很厉害,所以,JVM是通过启动多个线程来实现并行处理的。这样JVM运行时内存分配是非常复杂的。可以通过如下介绍进行理解。
运行时数据区域:
线程私有内存区:程序计数器
java虚拟机桟
线程共享内存区:方法区
java堆(存放对象)(类-执行操作,对象-执行方法,对象都是同一类)
上述的东西都是存放在内存中的,当内存存满后就会内存溢出,为了避免这个情况,Java会进行内存回收;Java定时自动内存回收,使用垃圾回收器GC。
垃圾回收算法:
1、标记清除(会产生碎片)
2、复制
3、标记整理