java8有个很好的特性,即JEP161(http://openjdk.java.net/jeps/161 ),该特性定义了Java SE平台规范的一些子集,使java应用程序不需要整个JRE平台即可部署和运行在小型设备上。开发人员可以基于目标硬件的可用资源选择一个合适的JRE运行环境。

好处

1.更小的Java环境需要更少的计算资源。

2.一个较小的运行时环境可以更好的优化性能和启动时间。

3.消除未使用的代码从安全的角度总是好的。

4.这些打包的应用程序可以下载速度更快。

概念

紧凑的JRE分3种,分别是compact1、compact2、compact3,他们的关系是compact1<compact2<compact3,他们包含的API如下图所示

使用javac根据profile编译应用程序

javac –bootclasspath, or javac –profile <profile>

如果不符合compact的api,则报错。

$ javac -profile compact2 Test.java
Test.java:7: error: ThreadMXBean is not available in profile 'compact2'ThreadMXBean bean = ManagementFactory.getThreadMXBean();^
Test.java:7: error: ManagementFactory is not available in profile 'compact2'ThreadMXBean bean = ManagementFactory.getThreadMXBean();^
2 errors

使用工具开发的效果

JPEDS工具使用

java8新增一个工具,用来分析应用程序所依赖的profile,有三个参数比较常用 -p,-v,-r

import java.util.Set;
import java.util.HashSet;public class Deps {public static void main(String[] args) {System.out.println(Math.random());Set<String> set = new HashSet<>();}
}
************** PROFILE ********************
jdeps -P Deps.class
Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar<unnamed> (Deps.class)-> java.io                                            compact1-> java.lang                                          compact1-> java.util                                          compact1************** VERBOSE ********************
jdeps -v Deps.class
Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jarDeps (Deps.class)-> java.io.PrintStream                                -> java.lang.Math                                     -> java.lang.Object                                   -> java.lang.String                                   -> java.lang.System                                   -> java.util.HashSet  ************** RECURSIVE ********************
jdeps -R Deps.class
Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar<unnamed> (Deps.class)-> java.io                                            -> java.lang                                          -> java.util
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/jce.jar -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jarjavax.crypto (jce.jar)-> java.io                                            -> java.lang                                          -> java.lang.reflect                                  -> java.net                                           -> java.nio                                           -> java.security                                      -> java.security.cert                                 -> java.security.spec                                 -> java.util                                          -> java.util.concurrent                               -> java.util.jar                                      -> java.util.regex                                    -> java.util.zip                                      -> javax.security.auth                                -> sun.security.jca                                   JDK internal API (rt.jar)-> sun.security.util                                  JDK internal API (rt.jar)-> sun.security.validator                             JDK internal API (rt.jar)javax.crypto.interfaces (jce.jar)-> java.lang                                          -> java.math                                          -> java.security                                      javax.crypto.spec (jce.jar)-> java.lang                                          -> java.math                                          -> java.security.spec                                 -> java.util
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/jce.jarjava.security (rt.jar)-> javax.crypto                                       JDK internal API (jce.jar)sun.security.util (rt.jar)-> javax.crypto                                       JDK internal API (jce.jar)-> javax.crypto.interfaces                            JDK internal API (jce.jar)-> javax.crypto.spec                                  JDK internal API (jce.jar)

在linux上构建profile

$ hg clone http://hg.openjdk.java.net/jdk8/jdk8/
$ cd jdk8
$ make images profiles :
## Finished profiles (build time 00:00:27)
----- Build times -------
Start 2013-03-17 14:47:35
End 2013-03-17 14:58:26
00:00:25 corba
00:00:15 demos
00:01:50 hotspot
00:00:24 images
00:00:21 jaxp
00:00:31 jaxws
00:05:37 jdk
00:00:43 langtools
00:00:18 nashorn
00:00:27 profiles
00:10:51 TOTAL
-------------------------
Finished building Java(TM) for target 'images profiles'
$ cd images
$ ls -d *image
j2re-compact1-image j2re-compact2-image j2re-compact3-image j2re-image j2sdk-image

编译后compact大致的占用空间

Java JDK新特性探究-精简的JRE相关推荐

  1. Java 8新特性探究(二)深入解析默认方法

    转载自 Java 8新特性探究(二)深入解析默认方法 什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. ...

  2. Java 8新特性探究(五)重复注解(repeating annotations)

    2019独角兽企业重金招聘Python工程师标准>>> 知识回顾 前面介绍了: lambda表达式和默认方法 (JEP 126) 批量数据操作(JEP 107) 类型注解(JEP 1 ...

  3. Java 8新特性探究(6):泛型的目标类型推断

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法 ...

  4. Java 8新特性探究(四)深入解析日期和时间-JSR310

    众所周知,日期是商业逻辑计算一个关键的部分,任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.但java之前的日期做法太令人恶心 ...

  5. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  6. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

  7. info java module_JAVA新特性视频教学:第三天_21_认识module-info.java文件.mp4

    本套Java 8和9 JDK新特性学习课程目录如下: 第一天Java视频课程学习内容:01_课程介绍 02_Java版本特性更新历史 03_面向对象的Runnable接口写法 04_编程思想转换 05 ...

  8. 跟我学 Java 8 新特性之 Stream 流(六)收集

    转载自   跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...

  9. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点

    转载自   跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...

最新文章

  1. 一文概述2017年深度学习NLP重大进展与趋势
  2. 电路过孔温度没有我们想象的那么高
  3. (iOS-框架封装)iOS设计模式——MVC模式
  4. scala 主构造函数_Scala-构造函数
  5. python 约束与异常处理
  6. 中兴上网卡 linux,电信3G无线上网卡中兴AC2726在Ubuntu 10.10安装使用成功
  7. 梦如果实现以后。。。。。。
  8. Web API-基本认知
  9. python抓取图片数字_Python OCR提取普通数字图形验证中的数字
  10. 预训练模型MT-BERT的探索和应用
  11. 1.thrift概述
  12. 你们要的炒股软件来啦,同花顺等 6 款工具类软件上架优麒麟软件商店
  13. Xshell连接路由器或交换机Console口
  14. 【EasyExcel导入、导出(百万数据量测试)粘贴即用】
  15. ubuntn下串口工具minicom ,kermit的使用
  16. 如何把数据导入数据库
  17. 绩效考核成绩管理平台
  18. python代码混淆工具,Python版代码混淆工具
  19. 我被炒了! 一位36岁程序员的的焦虑与困惑...
  20. 8051f CH375 优盘---ch375.c

热门文章

  1. Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现 【转】
  2. 全程2分钟!教你如何免费下载Windows 10
  3. Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes
  4. java listt add_Java8 使用流抽取ListT集合中T的某个属性操作
  5. python3怎么使用qstring_PyQt的QString和python的string的区别
  6. freebsd 安装mysql_Freebsd中mysql安装及使用笔记
  7. mysql 分表后如何扩展_MySQL横向扩展-分库分表解决方案总结
  8. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍
  9. 鳗鱼刺多怎么处理图像_图像二值化处理
  10. 服务器本地打开asp文件路径,服务器本地打开asp文件