[Reprint] Java 8 new features to explore (eight) Detailed streamlined JRE

Java 8 new features to explore (eight) Detailed streamlined JRE 

HTTPS: // my.oschina.net/benhaile/blog/211804 

Lite api

 

 

Oracle has released Java 8 as scheduled official version! Do not let the javaer disappointed. For one person, 18-year-old is a turning point in life, from immature to mature, the law means that you are completely capacity for civil conduct, no longer benefit from the Protection of Minors Act, so far this year, java has gone through 18 years , java8 is a new milestone, many unprecedented characteristics, lambda expressions, Stream API, new Date time api, concurrent multi-core support, and other major security improvements, we believe that java is getting better, the rich class library and a large open-source environment is not available in other languages, talking about the rich class library, many students will Tucao, java lose weight, the weight loss is indeed, java8 has a nice feature that JEP161 ( HTTP : //openjdk.java.net/jeps/161  ), which defines the characteristics of some subset of the java SE platform specification, so that applications do not need the entire JRE java platform can be deployed and run on small devices. Available resources based on the target hardware developers can select a suitable JRE runtime environment.

benefit

 

1. smaller Java environment requires less computing resources.

Runtime environment can better optimize performance and a start time of 2 smaller.

3. eliminate unused code from a security point of view is always good.

4. These packaged applications faster download speeds.

concept

Compact JRE 3 types, namely compact1, compact2, compact3, their relationship is compact1 <compact2 <compact3, API as shown in FIG they contain

Use javac to compile the application in accordance 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.jar
   Deps (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.jar    javax.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.jar    java.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需要一个占用资源少的JRE运行环境,紧凑的JRE特性的出现,希望能带来以后的物联网的发展,甚至还是会有大量的java应用程序出现在物联网上面。目前oracle也发布了针对raspberry pi的JRE了。

另外该特性也是为java9的模块化项目做准备,模块化特性是javaer所期待的特性。他是解决业务系统复杂度的一个利器,当然OSGI也是相当的出色。但osgi对于新学者来说未免太复杂了。

Guess you like

Origin www.cnblogs.com/jinanxiaolaohu/p/11187384.html