第2章 OpenJ9介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第2章 OpenJ9介绍相关的知识,希望对你有一定的参考价值。
参考技术A Eclipse OpenJ9 是一个 Java 虚拟机(JVM),它是运行 Java 应用程序的引擎,而 OpenJDK 是一个完整的 开发工具 包,包含其他组件,如Java 类库以及 JVM。默认情况下,OpenJDK 使用名为 Hotspot 的 JVM。简单地说,OpenJ9 是一个 JVM 替代方案,可将其作为 OpenJDK 二进制文件的一部分。而OpenJ9其自身是基于IBM开源的OMR项目所构建,OMR项目由一个高度集成的开放源码C和c++组件,可用于构建大量的语言,运行时支持许多不同的硬件和操作系统平台。这些组件包括但不限于:内存管理,线程处理,平台端口(抽象)库,诊断支持,监控支持,垃圾收集和本地实时编译。OMR的意图在于让实现语言的人能够重用IBM在Java运行时方面所投入的数百开发人年所取得的成果,能够受益的包含已有的语言如Ruby、Python、javascript等等,它还能加快新语言的创建过程。
OpenJ9,OMR和OpenJDK的关系如下图所示:
在上图中,箭头起点表示了上游的开源项目,而这点可以通过运行java -version的输出可以看到,如下:
让我们来看看OpenJ9给出官方测试结果,在测试中所使用的负载是daytrader7这个基准测试项目,其地址是:https://github.com/wasdev/sample.daytrader7,它是一个围绕在线股票交易系统范例构建的应用程序,该应用程序允许用户登录,查看其投资组合,查询股票报价以及买入或卖出股票股票;借助基于Web的加载驱动程序(如Apache JMeter),DayTrader提供的实际工作负载可用于衡量和比较各种供应商提供的Java平台企业版(Java EE)应用程序服务器的性能。除了完整的工作负载之外,应用程序还包含一组用于各种Java EE组件和通用设计模式的功能和性能测试的原语。 DayTrader的新设计涵盖Java EE 7,包括新的WebSockets规范。其他Java EE特性包括JSP,Servlet,EJB,JPA,JDBC,JSF,CDI,Bean验证,JSON,JMS,MDB和事务(同步和异步/两阶段提交)。
其性能的测试结果查看:https://www.eclipse.org/openj9/oj9_performance.html#g1,其测试结果如下图所示:
1)启动后的内存消耗
2)在负载压力平稳后的内存消耗
3)系统启动耗时
4)吞吐量
5)在CPU受限环境中的测试
从这些测试结果中,与Hotspot相比OpenJ9有如下的优势:
1)启动时的内存占用减少了66%
2)负载稳定后的内存占用减少了63%
3)启动时间缩短了42%
4)吞吐量相近
5)在CPU受限的环境中能更快的达到最大吞吐量
第1章 Docker介绍
第1章 Docker介绍
1.1. docker简介
- Docker是一个开源的应用容器引擎,基于GO语言开发并遵从 Apache2.0 协议开源;
- Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化;
- 容器完全使用沙盒机制,相互之间不会有任何借口,更重要的是容器性能开销极低;
Docker从17.03版本之后分为CE(Community Edition:社区办),和EE(Enterprise Edition:企业版),我们使用社区办即可。
1.2. docker的应用场景
- Web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenStack 或 Cloud Foundry 平台来搭建自己的paas环境。
1.3. docker的优点
作为一种新兴的虚拟化方式,docker跟传统的虚拟化方式相比具有众多的优势:
1.3.1. 更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
1.3.2. 更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
1.3.3. 一致的运行环境
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现环境不一致导致的问题。
1.3.4. 持续交付和部署
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Integration)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署。而使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解运行所需条件,帮助更好的生产环境中部署该镜像。
1.3.5. 更轻松的迁移
由于docker确保了执行环境的一致性,使得应用的迁移更加容易。docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
1.3.6. 更轻松的维护和扩展
docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
1.3.7. 对比传统虚拟机总结
- 容器:启动秒级, 硬盘使用(MB), 性能接近原生, 单机支持上千个容器;
虚拟机:启动分钟级, 硬盘使用(GB), 性能弱于原生, 单机一般支持几十个。
以上是关于第2章 OpenJ9介绍的主要内容,如果未能解决你的问题,请参考以下文章