Java SE Embedded 8 紧凑 Profile 概述

 

Java SE Embedded 8 引入了一个新概念 — 紧凑 Profile,可以减少不需要整个 Java 平台的应用的内存占用量。Java SE 8 javac 编译器有一个新的 -profile 选项,可以使用一个新的支持的 profile 编译应用。

支持的 profile 有三个:compact1compact2compact3。这些是附加层,因此每个 profile 都包含以前较小的紧凑 Profile 中的全部 API,在此基础上还增加了相应的 API。紧凑 profile 特性在小型设备中很有用。使用它还可以缩短从下载服务器(如“App Store”)下载应用的时间。它有助于更紧凑地部署捆绑 JRE 的 Java 应用。可以使用紧凑 profile 配置 JRE,减小其空间占用,以便与 profile 应用一起部署。

概述

紧凑 Profile 是完整 Java SE 平台 API 的一个子集。由于紧凑 Profile 所需的存储空间更小,所以可以让许多 Java 应用在资源受限设备上运行。选择非常符合应用的功能需求的紧凑 profile 可以尽量减少专用于未使用功能的存储。Java SE Embedded 8 中新增的嵌入式开发人员工具包括 jrecreate 和 jdeps,开发人员可以使用这些工具针对某一平台定制紧凑 Profile 运行时环境,查明紧凑 Profile 的依赖关系,以便在平台开发过程中进行分析。

紧凑 Profile 只解决 API 选择问题;它们与 Java 虚拟机、语言本身或工具无关。因此,必须小心地将 Java 虚拟机支持的功能与所需的 API 支持匹配。

有三个 profile:compact1、compact2 和 compact3。每个 profile 都包含低编号 profile 的 API(compact2 是 compact1 的超集)。完整 SE API 是 compact3 profile 的超集。下表显示每个 profile 的高级组成:

完整 SE API Bean 输入法 IDL
  首选项 辅助功能 打印服务
  RMI-IIOP CORBA Java 2D
  声音 Swing  
  AWT 拖放  
  图像 I/O  JAX-WS  
compact3 安全性1 JMX JNDI
  XML JAXP2 管理 插装
compact2 JDBC RMI XML JAXP
compact1 核心 (java.lang.*) 安全性 序列化
  网络 引用对象 正则表达式
  日期和时间 输入/输出 集合
  日志记录 并发性 反射
  JAR ZIP 版本控制
  国际化 JNI 覆盖机制
  扩展机制 脚本编写  


1.compact1 安全性中新增了 kerberos、acl 和 sasl。

2.compact2 XML JAXP 中新增了 crypto。

这些 JDK 8 工具显式支持 profile:

详细的 profile 组成

下表列出每个紧凑 profile 中的 API 软件包。API 参考还定义了 profile 组成。

compact1 compact2 新增项 compact3 新增项
java.io java.rmi java.lang.instrument
java.lang java.rmi.activation java.lang.management
java.lang.annotation java.rmi.dgc java.security.acl
java.lang.invoke java.rmi.registry java.util.prefs
java.lang.ref java.rmi.server javax.annotation.processing
java.lang.reflect java.sql javax.lang.model
java.math javax.rmi.ssl javax.lang.model.element
java.net javax.sql javax.lang.model.type
java.nio javax.transaction javax.lang.model.util
java.nio.channels javax.transaction.xa javax.management
java.nio.channels.spi javax.xml javax.management.loading
java.nio.charset javax.xml.datatype javax.management.modelmbean
java.nio.charset.spi javax.xml.namespace javax.management.monitor
java.nio.file javax.xml.parsers javax.management.openmbean
java.nio.file.attribute javax.xml.stream javax.management.relation
java.nio.file.spi javax.xml.stream.events javax.management.remote
java.security javax.xml.stream.util javax.management.remote.rmi
java.security.cert javax.xml.transform javax.management.timer
java.security.interfaces javax.xml.transform.dom javax.naming
java.security.spec javax.xml.transform.sax javax.naming.directory
java.text javax.xml.transform.stax javax.naming.event
java.text.spi javax.xml.transform.stream javax.naming.ldap
java.time javax.xml.validation javax.naming.spi
java.time.chrono javax.xml.xpath javax.security.auth.kerberos
java.time.format org.w3c.dom javax.security.sasl
java.time.temporal org.w3c.dom.bootstrap javax.sql.rowset
java.time.zone org.w3c.dom.events javax.sql.rowset.serial
java.util org.w3c.dom.ls javax.sql.rowset.spi
java.util.concurrent org.xml.sax javax.tools
java.util.concurrent.atomic org.xml.sax.ext javax.xml.crypto
java.util.concurrent.locks org.xml.sax.helpers javax.xml.crypto.dom
java.util.function   javax.xml.crypto.dsig
java.util.jar   javax.xml.crypto.dsig.dom
java.util.logging   javax.xml.crypto.dsig.keyinfo
java.util.regex   javax.xml.crypto.dsig.spec
java.util.spi   org.ietf.jgss
java.util.stream    
java.util.zip    
javax.crypto    
javax.crypto.interfaces    
javax.crypto.spec    
javax.net    
javax.net.ssl    
javax.script    
javax.security.auth    
javax.security.auth.callback    
javax.security.auth.login    
javax.security.auth.spi    
javax.security.auth.x500    
javax.security.cert    


了解应使用哪个紧凑 profile  

开发适用于紧凑 Profile 的应用时,切记只能使用 compact1、compact2 或 compact3 profile 规范中所能找到的 API。请参考上面的“profile 详细比较”,看看每个紧凑 Profile 中包含哪些 Java 软件包。为了轻松编写适用于紧凑 Profile 的嵌入式应用,您可以在编写应用之后使用“jdeps”工具查看源代码正在使用哪些 Java 软件包。观察对 Java 应用运行 jdeps 的结果,您将看到执行应用将需要哪个紧凑 Profile 运行时。
 

使用 jdeps 工具


下面显示了 jdeps 工具的用法:

$ jdeps
Usage: jdeps <options> <classes...>
where <classes> can be a pathname to a .class file, a directory, a JAR file,
or a fully-qualified classname or wildcard "*".  Possible options include:
  -s         --summary                 Print dependency summary only
  -v         --verbose                 Print additional information
  -V <level> --verbose-level=<level>   Print package-level or class-level dependencies
                                       Valid levels are: "package" and "class"
  -c <path>  --classpath=<path>        Specify where to find class files
  -p <pkg name> --package=<pkg name>   Restrict analysis to classes in this package
                                       (may be given multiple times)
  -e <regex> --regex=<regex>           Restrict analysis to packages matching pattern
                                       (-p and -e are exclusive)
  -P         --profile                 Show profile or the file containing a package
  -R         --recursive               Recursively traverse all dependencies
             --version                 Version information

 

使用 jdeps 的典型方式是使用“-P”打印您的应用正在使用的 profile,以便您查看执行该应用必须使用哪个紧凑 Profile。

例如,下面是一个典型的 jdeps 运行,可以查明要哪个紧凑 profile 是运行该程序必需的最低 profile:

% jdeps -P HelloWorld.class
 
HelloWorld.class -> /net/test11.us.example.com/export/java-re/jdk/8/ea/b124/binaries/linux-i586/jre/lib/rt.jar
   <unnamed> (HelloWorld.class)
      -> java.io                                            compact1
      -> java.lang                                          compact1


上例中的结果显示,compact1 profile 是运行 HelloWorld 应用所需的最低 profile。因此,HelloWorld 应用必须使用 compact1 Java SE Embedded 8 运行时运行。
 

Oracle Java SE Embedded 版本 8


Oracle Java SE Embedded 版本 8 下载




更多信息

其他 Java SE Embedded 下载

Java SE Embedded 系统要求

为方便起见,下载包中包括 Java SE for Embedded 的技术文档。
还可以在线访问 Java SE Embedded 文档:

Java SE Embedded 文档