开发必会系列:J2EE是什么

为什么Java是跨平台的?
高级语言通过编译器,转为汇编语言,汇编语言通过汇编器转为0和1。
当c转为汇编时,不同厂家cpu,用不同的指令集,所以有不同的汇编语言结果,导致c不能跨平台。
java在各平台装java虚拟机,就相当于做了个格式转换,也体现了分层的概念,docker也是这样。所以java代码,扔给不同平台,经过jdk一转化,那个平台就能看懂了。
所以,java是跨平台的。
 
为什么c和c++没有被java替换呢?
原因很多,比如,垃圾回收问题,正如周正明书里提到: java和c++之间有一堵由动态内存分配和垃圾收集技术所围成的'高墙',墙外的人想进去,墙内的人想出来。c++与java各有千秋
 
C语言编译完了就直接是硬件能够识别的二进制,不像java,需要jvm才能运行。
C语言不用自举,除了第一个开发C语言的,需要用汇编来做,后面都可以用锤子造锤子。
 
Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。(解释是通过Java虚拟机来执行的)
 

1、在最早的 java发布时,执行引擎原理:解析 字节码指令,转换为调用对应的 c语言函数实现。例如: if(opcode等于xx001) { add(a,b); } , xx001是字节码指令,add(a,b) 是c语言实现的函数。

2、后来由于直接翻译为c语言再去执行效率太低,为了提高执行效率,干脆直接将字节码指令翻译为机器码(不经过c了),然后将pc寄存器指向那块临时生成的机器码内存区域起始地址,交给cpu执行 ,在c语言里使用函数指针可以实现这个目标(在c语言里可以实现直接执行汇编代码或者机器码)。

3、再后来出现优化热点代码的技术,比如 for 循环 这种场景,我干脆把第一次for循环里面的指令生成的机器码缓存起来,重复利用,不用每次分配内存生成重复机器码,回收内存了。

JDK、JRE、JVM三者间的关系
 
什么是javaEE?
java发明之后,经历了一系列的升级和改名,如今有javaME(硬件用)、javaSE(标准版)、javaEE(企业版)。企业版比标准版多了些类,如 EJB、servlet等。
工作中,java做企业级开发多,所以只关注javaEE就行。如今javaEE最新版本为8(目前2018年),而javaSE已经到了11。
 
1、JavaEE它有13个核心技术, JDBCJNDIEJB、RMI、ServletJSP、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF。
JavaEE 拥有广泛市场的原因之一就是可以使用多种框架来使开发变得简单。 目前比较常见的框架组合 SSHSSM。如今又有了springboot cloud分布式。
所以像EJB3.0虽然曾是javaEE5作为企业级应用的核心功能,但却没什么人用。反而现在的很多框架的基础都是servlet、JSP。参考文章:什么是JavaEE
 
2、企业级架构,都是从单机走向分布式的。分布式的发展,到目前为止一共经历了四个阶段(目前2018年),EJB位于第二阶段(EJB到底是什么EJB怎么用),第三阶段出现了webservice和rest,第四阶段是dubbo。发展历史一言蔽之,就是数据传输(Java对象调用),从最开始的序列化,中间变成了文档,现在又变回序列化,详情参考。而未来,将会是以微服务为主的第五阶段。
 
JavaEE——web框架发展史
1、Servlet的出现
2、Jsp的出现
3、倡导了MVC思想的Servlet版本1.2出现——JSP+Servlet+JavaBean
4、框架阶段4.1、Struts的出现
    Spring的出现
    SpringMVC的出现
 
原文地址:https://www.cnblogs.com/zhaot1993/p/13053048.html