为什么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个核心技术, JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF。
JavaEE 拥有广泛市场的原因之一就是可以使用多种框架来使开发变得简单。 目前比较常见的框架组合有 SSH和SSM。如今又有了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的出现
 

开发必会系列:J2EE是什么的更多相关文章

  1. ASP.NET MVC开发必看系列

    一.关于HTTP协议的那些事 这可以说我们开发WEB程序的空气,推荐不断温故知新! HTTP协议 (一) HTTP协议详解 HTTP协议 (二) 基本认证 HTTP协议 (三) 压缩 HTTP协议 ( ...

  2. J2EE开发实战基础系列之开卷有益

    2014.10.24[致歉]{抱歉,从7.4号接到朋友的请求,一直忙到现在,最近又有新的CASE要忙,很抱歉教程要延误,开课时间请大家关注Q群} 时隔七年再次接触培训有关的事情,是兴奋,更多的是恐惧, ...

  3. Visual Studio (VS IDE) 你必须知道的功能和技巧 - 【.Net必知系列】

    前言 本文主要阐述一些Visual Studio开发下需要知道的少部分且比较实用的功能,也是很多人忽略的部分.一些不常用而且冷门的功能不在本文范围,当然本文的尾巴[.Net必知系列]纯属意淫,如有雷同 ...

  4. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  5. 程序员收藏必看系列:深度解析MySQL优化(二)

    程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而 ...

  6. .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)

    Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一系列是使用.NET/C# ...

  7. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  8. Java开发必会的Linux命令

    Java开发必会的Linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器 ...

  9. 前端开发必须知道的JS(二) 闭包及应用

    http://www.cnblogs.com/ljchow/archive/2010/07/06/1768749.html 在前端开发必须知道的JS(一) 原型和继承一文中说过下面写篇闭包,加之最近越 ...

  10. 打造高质量Android应用:Android开发必知的50个诀窍

    打造高质量Android应用:Android开发必知的50个诀窍

随机推荐

  1. Miniconda 安装和使用笔记

    Miniconda是Anaconda的简化版, 可以管理多个Python版本的环境. 实际使用的话, 占用的空间不会很小, 我跑一些正常的应用后, 安装目录占用空间4.3GB, 安装建议要预留10到2 ...

  2. STC8H8K64U 的 USB 功能测试(续)

    对 STC8H8K64U 的USB测试昨天没搞定, 判断可能是供电的问题, 直接用5V不行, 从USB2TTL上采电3.3V时存在一个问题, 就是 D-/D+ 在上电前就已经连接了, 不符合 USB ...

  3. 【OpenGL ES】渐变凸镜贴图

    1 前言 ​ 正方形图片贴到圆形上 中将正方形图片上的纹理映射到圆形模型上,凸镜贴图 中介绍了将圆形图片上的纹理映射到凸镜模型上.如果将原图片逐渐变为凸镜效果,中间的变化过程又是什么样的? ​ 图片的 ...

  4. win32-FileTimeToSystemTime的使用

    #include <Windows.h> #include <iostream> #include <string> #pragma warning(disable ...

  5. deque双端队列

    # 支持从任意一端增加和删除元素 d = collections.deque() d.extend('abcdefg') d.append('h') d.extendleft(range(6)) # ...

  6. Advanced .Net Debugging 2:CLR基础

    一.简介 这是2024新年后我的第一篇文章,也是我的<Advanced .Net Debugging>这个系列的第二篇文章.这篇文章告诉我们为了进行有效的程序调试,我们需要掌握哪些知识.言 ...

  7. Spring使用注解方式进行事务管理

    目录 使用步骤: 步骤一.在spring配置文件中引入tx:命名空间 步骤二.具有@Transactional 注解的bean自动配置为声明式事务支持 步骤三.在接口或类的声明处 ,写一个@Trans ...

  8. 【Azure 应用服务】App Service for Windows 环境中为Tomcat自定义4xx/5xx页面

    问题描述 通过设置Java Web项目,实现在App Service For Windows环境中达到自定义4XX/5XX的页面效果 问题解答 第一步:在本地项目文件中打开web.xml文件 (src ...

  9. vivo 在离线混部探索与实践

    作者:来自 vivo 互联网服务器团队 本文根据甘青.黄荣杰老师在"2023 vivo开发者大会"现场演讲内容整理而成. 伴随 vivo 互联网业务的高速发展,数据中心的规模不断扩 ...

  10. Java 常用类 于 StringBuffer 和 StringBuilder的使用 + String三者的异同

    1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 /** 6 * 关于 StringBuffer 和 StringB ...