2.JVM虚拟机

2.1  概述

  

  java获得广泛认可主要是因为:

(1)  java是一门结构严谨、面向对象的编程语言;

(2)  java摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想;

(3)  java提供了一套相对较为安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题;

(4)  java实现了热点代码检测和运行时编译及优化,使得java随着运行时间增加,获得更高的性能;

(5)  有一套完善的应用程序接口,还有无数的商业机构、开源社区的第三方库;

2.2  java技术体系

2.2.1 java技术体系包括以下几个组成部分:

  • java程序设计语言
  • 各种硬件平台上的java虚拟机
  • class文件格式
  • java API类库
  • 商业机构、开源社区的第三方java类库

(1)把java程序设计语言、java虚拟机、java API类库这三个部分统称为JDK(Java Development Kit),JDK是支持java程序开发的最小环境;

(2)把java API类库中Java SE API子集和java虚拟机两部分统称为JRE(Java Runtime Eenvironment),JRE是支持java程序运行的标准环境;

(如下图所示)

2.2.2 java技术平台可以分为4个平台:

  • Java Card: 支持一些java小程序(applet),运行在小内存设备(如智能卡)上的平台;
  • Java ME(Micro Edition): 支持java运行在移动终端(手机、PDA)平台,对Java API有所精简,并加入对移动终端的支持,这个版本以前称为J2ME;
  • Java SE(Standard Edition): 支持面向桌面级应用(如windows下的应用程序)的java平台,提供完整的java核心API,这个版本以前称为J2SE;
  • Java EE(Enterprise Edition): 支持多层架构的企业应用(如ERP、CRM应用)的java平台,提供了Java SE API外,还对其做了大量的扩充并提供相应的部署支持,以前称为J2EE;

2.3  java发展历史

  • 1991年4月,James Gosling领导”绿色计划“,诞生Oak(java的前身);
  • 1995年5月,Oak语言改名为Java,在SunWorld大会上,公布java1.0版本,提出”Write Once ,Run any Where“的口号
  • 1998年12月,sun吧java技术体系拆分为三个方向J2SE、J2EE、J2ME;
  • 1999年4月,HotSpot虚拟机发布,由一家”LongView Technologies”开发,后被sun公司收购;
  • 2000年5月,JDK1.3发布,提供java 2D API 并且新增添JavaSound类库;
  • 2002年2月,JDK1.4发布,发布了很多新技术,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器;
  • 2004年9月,JDK1.5发布,加入自动装箱、范型、动态注释、枚举、可变长参数、遍历循环(foreach)等语法特性,改进了java内存模型,提供了java.util.concurrent并发包;
  • 2006年11月,Sun公司宣布java会开源;
  • 2006年12月,JDK1.6发布,启用Java SE6、Java EE6、Java ME 6的命名方式。改进了Java虚拟机,包括锁与同步、垃圾收集、类加载等方面算法;
  • 2009年2月,JDK1.7发布,提供新的G1收集器、加强对非java语言的调用支持、升级加载类架构;
  • 2013年9月,JDK1.8发布;

2.4  java虚拟机发展历史

  • 1996年,Sun Classic VM虚拟机;
  • 1999年,Sun HotSpot VM虚拟机,服务器/桌面领域的商用虚拟机;
  • Sun Mobile-embedded VM / Meta-Circular VM(KVM、JavaInJava、Maxine VM):针对移动端和嵌入式;
  • BEA JRockit / IBM J9 VM;
  • Azul VM / BEA Liquid VM;
  • Apache Hoarmony / Google Andriod DalvikVM;
  • Microsoft JVM;

2.5  实战:自己编译虚拟机

  

  书本上的内容年代比较久远了,参考了一下linux公社的文章(http://www.linuxidc.com/Linux/2016-04/130484.htm)

  (也可以用intellij idea查看jvm日志和GC回收信息,可以网上google也可以私信我)

---恢复内容结束---

深入理解java虚拟机_前言的更多相关文章

  1. 深入理解java虚拟机_第三章(上)----->垃圾收集器与内存分配策略

    1.  前言 这一版块内容比较多,分为两篇文章来做笔记.本文讲述上半部分垃圾收集部分;下一篇文章写内存分配部分. 概述 对象已死吗? 引用技术算法 可达性分析算法 再谈引用 两次标记 回收方法区 2. ...

  2. 深入理解java虚拟机_第二章_读书笔记

    1.本章内容目录: 概述 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位 ...

  3. 运用《深入理解Java虚拟机》书中知识解决实际问题

    前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...

  4. 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势

    0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...

  5. 深入理解java虚拟机---java内存区域与内存溢出异常---1内存结构

    本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...

  6. 深入理解Java虚拟机(一) 运行时数据区划分

    前言:从我学Java的第一天开始,我的大学老师就告诉我 Java语言相比C.C++的语言有一个非常强大的功能,那就是自动内存管理:我们用Java编码时不需要申请或释放内存等,这些工作全部交由我们的Ja ...

  7. 深入理解Java虚拟机一 阅读笔记

    xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...

  8. 深入理解Java虚拟机二 阅读笔记

    xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...

  9. 深入理解java虚拟机系列初篇(一):为什么要学习JVM?

    前言 本来想着关于写JVM这个专栏,直接写知识点干货的,但是想着还是有必要开篇讲一下为什么要学习JVM,这样的话让一些学习者心里有点底的感觉比较好... 原因一:面试 不得不说,随着互联网门槛越来越高 ...

随机推荐

  1. 下一个计划 : .NET/.NET Core应用性能管理系统

    前言 最近几个月一直在研究开源的APM和监控方案,并对比使用了Zipkin,CAT,Sky-walking,PinPoint(仅对比,未实际部署),Elastic APM,TICK Stack,Pro ...

  2. STM32F030如何正确配置IO口的复用功能

    本文所使用的单片机型号为STM32F030C8T6. 在030系列的单片机中,PA2引脚除了作为普通的IO引脚用作输入输出功能以外,还可以作为内部外设串口1,串口2,定时器15通道1这三个外设的功能引 ...

  3. python3学习笔记(2)

    一.面向对象(初识)由类和方法组成,类里面封装了很多功能,根据这个类,可以创建一个这个类的对象,即对象是根据这个类创建的,以后这个对象要使用某个功能的时候就从这个类里面的找.例:str -功能一 -功 ...

  4. Spring4 AOP详解

    Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解.所以这章主要从三个方面详解AOP:AOP简介(了解),基于注 ...

  5. kafka原理和实践(一)原理:10分钟入门

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  6. EntityFramework For Mysql 动态切换数据源

    1.简介 在工作中遇到一个问题.项目有三个数据库(三个数据库表结构一样),用户可以选择使用哪个数据库.其实就是动态切换数据库连接. 2.EntityFramework For Mysql 先来简单的介 ...

  7. MySql的简单数据类型区别与认识

    date     3字节,日期,格式:2014-09-18time     3字节,时间,格式:08:42:30datetime     8字节,日期时间,格式:2014-09-18 08:42:30 ...

  8. vue2.x利用脚手架快速构建项目并引入bootstrap、jquery

    要使用vue-cli脚手架搭建项目,首先需要安装node.js Node.js官网:https://nodejs.org/en/download/ 选择你对应的系统即可下载,下载完成后傻瓜式安装即可. ...

  9. javascript设计模式——发布订阅模式

    前面的话 发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模 ...

  10. HBase源代码分析之HRegion上MemStore的flsuh流程(一)

    了解HBase架构的用户应该知道,HBase是一种基于LSM模型的分布式数据库.LSM的全称是Log-Structured Merge-Trees.即日志-结构化合并-树. 相比于Oracle普通索引 ...