Java8新特性探究(8):精简的JRE详解

Oracle公司如期发布了Java 8正式版!没有让广大javaer失望。对于一个人来说,18岁是人生的转折点,从稚嫩走向成熟,法律意味着你是完全民事行为能力人,不再收益于未成年人保护法,到今年为止,java也走过了18年,java8是一个新的里程碑,带来了***的诸多特性,lambda表达式,Stream API,新的Date time api,多核并发支持,重大安全问题改进等,相信java会越来越好,丰富的类库以及庞大的开源生态环境是其他语言所不具备的,说起丰富的类库,很多同学就吐槽了,java该减肥了,确实是该减肥,java8有个很好的特性,即JEP161(http://openjdk.java.net/jeps/161 ),该特性定义了Java SE平台规范的一些子集,使java应用程序不需要整个JRE平台即可部署和运行在小型设备上。开发人员可以基于目标硬件的可用资源选择一个合适的JRE运行环境。

成都创新互联拥有十余年成都网站建设工作经验,为各大企业提供网站制作、成都做网站服务,对于网页设计、PC网站建设(电脑版网站建设)、app软件开发公司、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、申请域名等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。

好处

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

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

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

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

概念

紧凑的JRE分3种,分别是compact1、compact2、compact3,他们的关系是compact1

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

javac –bootclasspath, or javac –profile

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

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

使用工具开发的效果

JPEDS工具使用

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

 
 
  1. import java.util.Set;  
  2. import java.util.HashSet;  
  3.  
  4. public class Deps {  
  5.   public static void main(String[] args) {  
  6.     System.out.println(Math.random());  
  7.     Set set = new HashSet<>();  
  8.   }  
  9. }  
 
 
  1. ************** PROFILE ********************  
  2. jdeps -P Deps.class   
  3. Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar  
  4.     (Deps.class)  
  5.       -> java.io                                            compact1  
  6.       -> java.lang                                          compact1  
  7.       -> java.util                                          compact1  
  8.  
  9. ************** VERBOSE ********************  
  10. jdeps -v Deps.class   
  11. Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar  
  12.    Deps (Deps.class)  
  13.       -> java.io.PrintStream                                  
  14.       -> java.lang.Math                                       
  15.       -> java.lang.Object                                     
  16.       -> java.lang.String                                     
  17.       -> java.lang.System                                     
  18.       -> java.util.HashSet    
  19.  
  20. ************** RECURSIVE ********************  
  21. jdeps -R Deps.class   
  22. Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar  
  23.     (Deps.class)  
  24.       -> java.io                                              
  25.       -> java.lang                                            
  26.       -> java.util                                            
  27. /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  
  28.    javax.crypto (jce.jar)  
  29.       -> java.io                                              
  30.       -> java.lang                                            
  31.       -> java.lang.reflect                                    
  32.       -> java.net                                             
  33.       -> java.nio                                             
  34.       -> java.security                                        
  35.       -> java.security.cert                                   
  36.       -> java.security.spec                                   
  37.       -> java.util                                            
  38.       -> java.util.concurrent                                 
  39.       -> java.util.jar                                        
  40.       -> java.util.regex                                      
  41.       -> java.util.zip                                        
  42.       -> javax.security.auth                                  
  43.       -> sun.security.jca                                   JDK internal API (rt.jar)  
  44.       -> sun.security.util                                  JDK internal API (rt.jar)  
  45.       -> sun.security.validator                             JDK internal API (rt.jar)  
  46.    javax.crypto.interfaces (jce.jar)  
  47.       -> java.lang                                            
  48.       -> java.math                                            
  49.       -> java.security                                        
  50.    javax.crypto.spec (jce.jar)  
  51.       -> java.lang                                            
  52.       -> java.math                                            
  53.       -> java.security.spec                                   
  54.       -> java.util                                            
  55. /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  
  56.    java.security (rt.jar)  
  57.       -> javax.crypto                                       JDK internal API (jce.jar)  
  58.    sun.security.util (rt.jar)  
  59.       -> javax.crypto                                       JDK internal API (jce.jar)  
  60.       -> javax.crypto.interfaces                            JDK internal API (jce.jar)  
  61.       -> javax.crypto.spec                                  JDK internal API (jce.jar)  

在linux上构建profile

 
 
  1. $ hg clone http://hg.openjdk.java.net/jdk8/jdk8/  
  2. $ cd jdk8  
  3. $ make images profiles :   
  4. ## Finished profiles (build time 00:00:27)  
  5. ----- Build times -------  
  6. Start 2013-03-17 14:47:35 
  7. End 2013-03-17 14:58:26 
  8. 00:00:25 corba  
  9. 00:00:15 demos  
  10. 00:01:50 hotspot  
  11. 00:00:24 images  
  12. 00:00:21 jaxp  
  13. 00:00:31 jaxws  
  14. 00:05:37 jdk  
  15. 00:00:43 langtools  
  16. 00:00:18 nashorn  
  17. 00:00:27 profiles  
  18. 00:10:51 TOTAL  
  19. -------------------------  
  20. Finished building Java(TM) for target 'images profiles' 
  21. $ cd images  
  22. $ ls -d *image  
  23. 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对于新学者来说未免太复杂了。

原文链接:http://my.oschina.net/benhaile/blog/211804

当前文章:Java8新特性探究(8):精简的JRE详解
浏览地址:http://www.shufengxianlan.com/qtweb/news48/68848.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联