为什么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. 提高Java开发生产力,我选Stream API,真香啊

    Java 8 引入的Stream API提供了一种新的数据处理方式,它以声明式.函数式的编程模型,极大地简化了对集合.数组或其他支持数据源的操作.Stream可以被看作是一系列元素的流水线.允许你高效 ...

  2. CF1826D Running Miles

    题目链接 题解 知识点:贪心,前缀和,枚举. 首先考虑一个贪心结论,选择区间端点一定是两个最大值,因此 \(i_1 = l,i_3 = r\) . 考虑变形式子 \((b_l + l) + b_{i_ ...

  3. NVME(学习笔记_杂谈)

    NVME 协议中一些概念的理解: 1.Namespace :可以将Namespace 理解为一片Logic Block的区域,一个Controller可以支持多个Namespace,每个Namespa ...

  4. Linux线程 | 创建 终止 回收 分离

    一.线程简介 线程是参与系统调度的最小单位.它被包含在进程之中,是进程中的实际运行单位. 一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务. 每个线程都有其对应的标识,称为线程 ...

  5. 【Unity3D】UGUI之布局组件

    1 概述 ​ 布局组件主要有:水平布局(HorizontalLayoutGroup).垂直布局(VerticalLayoutGroup).网格布局(GridLayoutGroup),用于约束子控件的布 ...

  6. Java设计模式-单例模式Singleton

    介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如 Hibernate 的 SessionF ...

  7. js中返回今天是星期几的方法

    var weeks=["星期日","星期一","星期二","星期三","星期四","星期五 ...

  8. 学习go语言编程之标准库

    标准库包分类 Golang标准库可以大致按其中库的功能进行以下分类: 分类 对应包 描述 输入输出 bufio,fmt,io,log,flag 这个分类包括二进制以及文本格式在屏幕.键盘.文件以及其他 ...

  9. chrome浏览器配置自定义搜索引擎

    chrome谷歌浏览器配置自定义搜索引擎 放弃百度搜索已经酝酿许久,现在搜索结果简直不忍直视.如果你想放弃使用百度搜索,并转向其他搜索引擎,头条搜索可能是一个不错的选择. 使用以下方式可以丝滑的使用其 ...

  10. iOS上拉边界下拉白色空白问题解决概述

    表现 手指按住屏幕下拉,屏幕顶部会多出一块白色区域.手指按住屏幕上拉,底部多出一块白色区域. 产生原因 在 iOS 中,手指按住屏幕上下拖动,会触发 touchmove 事件.这个事件触发的对象是整个 ...