Java8新特性之精簡的JRE詳解_動力節(jié)點Java學(xué)院整理
Oracle公司如期發(fā)布了Java 8正式版!沒有讓廣大javaer失望。對于一個人來說,18歲是人生的轉(zhuǎn)折點,從稚嫩走向成熟,到今年為止,java也走過了18年,java8是一個新的里程碑,帶來了前所未有的諸多特性,lambda表達式,Stream API,新的Date time api,多核并發(fā)支持,重大安全問題改進等,相信java會越來越好,豐富的類庫以及龐大的開源生態(tài)環(huán)境是其他語言所不具備的,說起豐富的類庫,很多同學(xué)就吐槽了,java該減肥了,確實是該減肥,java8有個很好的特性,該特性定義了Java SE平臺規(guī)范的一些子集,使java應(yīng)用程序不需要整個JRE平臺即可部署和運行在小型設(shè)備上。開發(fā)人員可以基于目標(biāo)硬件的可用資源選擇一個合適的JRE運行環(huán)境。
好處
1.更小的Java環(huán)境需要更少的計算資源。
2.一個較小的運行時環(huán)境可以更好的優(yōu)化性能和啟動時間。
3.消除未使用的代碼從安全的角度總是好的。
4.這些打包的應(yīng)用程序可以下載速度更快。
概念
緊湊的JRE分3種,分別是compact1、compact2、compact3,他們的關(guān)系是compact1<compact2<compact3,他們包含的API如下圖所示

使用javac根據(jù)profile編譯應(yīng)用程序
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使用工具開發(fā)的效果

JPEDS工具使用
java8新增一個工具,用來分析應(yīng)用程序所依賴的profile,有三個參數(shù)比較常用 -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上構(gòu)建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大致的占用空間

總結(jié)
如今,物聯(lián)網(wǎng)正風(fēng)行一時。我們看到大量不同的設(shè)備在市場上出現(xiàn),每一種的更新速度都越來越快。java需要一個占用資源少的JRE運行環(huán)境,緊湊的JRE特性的出現(xiàn),希望能帶來以后的物聯(lián)網(wǎng)的發(fā)展,甚至還是會有大量的java應(yīng)用程序出現(xiàn)在物聯(lián)網(wǎng)上面。目前oracle也發(fā)布了針對raspberry pi的JRE了。
另外該特性也是為java9的模塊化項目做準(zhǔn)備,模塊化特性是javaer所期待的特性。他是解決業(yè)務(wù)系統(tǒng)復(fù)雜度的一個利器,當(dāng)然OSGI也是相當(dāng)?shù)某錾?。但osgi對于新學(xué)者來說未免太復(fù)雜了。
相關(guān)文章
Java 獲取當(dāng)前系統(tǒng)時間的三種方法
這篇文章主要介紹了Java 獲取當(dāng)前系統(tǒng)時間的三種方法,幫助大家利用Java處理時間,感興趣的朋友可以了解下2020-10-10
mybatis中<if>標(biāo)簽bool值類型為false判斷方法
這篇文章主要給大家介紹了關(guān)于mybatis中<if>標(biāo)簽bool值類型為false判斷方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
線程池之newFixedThreadPool定長線程池的實例
這篇文章主要介紹了線程池之newFixedThreadPool定長線程池的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
spring一個項目多個模塊聚合打包問題解決方案(最新推薦)
最近遇到個需求,針對后端解耦模塊較多的項目,想在云端啟動時簡潔些只啟動一個jar文件的情景,本文重點給大家介紹spring一個項目多個模塊聚合打包問題解決方案,感興趣的朋友一起看看吧2023-09-09
Springboot+redis+Vue實現(xiàn)秒殺的項目實踐
本文主要介紹了Springboot+redis+Vue實現(xiàn)秒殺的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
java validation 后臺參數(shù)驗證的使用詳解
本篇文章主要介紹了java validation 后臺參數(shù)驗證的使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10

