JVM笔记(2)

Stella981
• 阅读 521

第一部分

  第一张 走进Java

     这一章主要讲述的是 Java发展的历程和不同公司研发Java虚拟机(虚拟机家族丰富的恩怨纠葛)。在这个虚拟机家庭中HotSpot以他独有的优势在虚拟机中独占鳌头,经久不衰。还有就是最后一节是一个实战事例,就是自己编译JDK(如果window系统可以安装VMware下安装Linux系统(ubunto版本)搭建编译环境),这个例个人感觉很不错,自己也在着手在干,也希望有兴趣的同学也去做一做。

第一点 Java技术体系

      按照功能划分:  Java核心类库, Java虚拟机,  Java程序设计语言。

      按照产品划分:  1. Java Card  支持Java小程序运行在小内存设备上的平台。

               2. Java ME  支持Java程序运行在移动终端上的平台。

               3. Java SE  支持面向桌面级应用上的平台。

               4. Java EE 支持使用多级架构的企业应用的Java平台。 

第二点 Java虚拟机家族

          1)Java虚拟机鼻祖: sun Classic  /  Exact VM

        对于sun Classic虚拟机来说它只是单纯的通过解释器来执行Java程序,而他的编译器需要通过外挂的形式,但是它是世界上第一款商用虚拟机,这样子就足以让我们记住它。

        Exact VM来说,它是有了现代高性能的虚拟机的雏形,对于来说它有准确的管理内存的优势,但是不幸的是不久它就被HotSpot VM取代了。而且在windows和Linux的试用版本都没发布。

        2)武林盟主:HotSpot VM 

        再来说一说HotSpot VM它不仅继承了sun之前虚拟机的准确式的内存管理和他自己的热点代码探测技术,还有优秀的理念和成果。使它成为了全世界使用最多的虚拟机。最后说一下其实它最初不是Java语言研发的,是为Self虚拟机设计的。

        3)小家碧玉:Mobile  /  Embedded VM  

        因为sun/oracle公司在Java ME发展不太好(在智能手机这部分主要是Android和ios占领)所以最终把Java ME这部分规划到Java SE Embedded下。

        4)天下第二:BEA JRockit  /  IBM J9 VM

        BEA JRockit当时主要是为服务器硬件和服务端应用场景的一款虚拟机,它的代码全部是通过即时编译器完成的,而且他的垃圾回收器在当时也是比较优秀的,但是EBA被oracle收购了,他最终永远的停留在R28版本。

        J9是一款和HotSpot相类似的,它发展全面在服务端,桌面开发,嵌入式的多用途的虚拟机,在职责分离和模块化这部分相比HotSpot虚拟机要好。J9这款虚拟机至今还非常活跃。

        5)软硬合璧:BEA Liquid  VM /  Azul VM

        Liquid VM 可以直接运行在自家的Hypervisor系统的虚拟机,可以说他本身就实现操作系统的必要功能,自身就可以直接控制硬件操作,可以最大的发挥硬件的能力,最终它也停止更新。

        Azul VM 是运行在vega系统上的Java虚拟机,他又有优秀的PGC和C4收集器,可以控制多个cpu和管理数百GB内存的硬件资源。

        6)挑战者:Apache Harmony /   Google Android Dalvik VM 

        对于Harmony和Dalvik只能称之为虚拟机不能称Java虚拟机,想要兼容Java体系,必须通过TCK的兼容性测试,由于sun没有把TCK的授权提供给Apache,导致Apache退出JCP组织,sun又开源了JDK,最终导致Apache领导的Apache Harmony不了了之。

        Dalvik是Android的虚拟机,但是在Android 5.0时候就被ART替代。

         7)Graal VM一款在HotSpot虚拟机上开发的跨语言的全栈虚拟机

第三点 展望未来

        总的来说Java未来是很难被替代的。

未完更新中,还会优化内容的!!!

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
技术小男生 技术小男生
5个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
5个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue