您的位置:首页 > 编程语言 > Java开发

Java 8新特性探究(八)精简的JRE详解

2014-03-25 18:30 393 查看
摘要详细解释compact
profile相关知识,字面上翻译是紧凑的配置文件,但我认为紧凑的JRE更容易理解,或者精简的JRE

目录[-]

好处

概念

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

使用工具开发的效果

JPEDS工具使用

在linux上构建profile

编译后compact大致的占用空间

总结

Oracle公司如期发布了Java8正式版!没有让广大javaer失望。对于一个人来说,18岁是人生的转折点,从稚嫩走向成熟,法律意味着你是完全民事行为能力人,不再收益于未成年人保护法,到今年为止,java也走过了18年,java8是一个新的里程碑,带来了前所未有的诸多特性,lambda表达式,Stream
API,新的Datetimeapi,多核并发支持,重大安全问题改进等,相信java会越来越好,丰富的类库以及庞大的开源生态环境是其他语言所不具备的,说起丰富的类库,很多同学就吐槽了,java该减肥了,确实是该减肥,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,orjavac–profile<profile>

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

1
$javac-profilecompact2Test.java
2
Test.java:
7
:error:ThreadMXBeanisnotavailableinprofile
'compact2'
3
ThreadMXBeanbean=ManagementFactory.getThreadMXBean();
4
^
5
Test.java:
7
:error:ManagementFactoryisnotavailableinprofile
'compact2'
6
ThreadMXBeanbean=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<String>set=
new
HashSet<>();
8
}
9
}
01
**************PROFILE********************
02
jdeps-PDeps.
class
03
Deps.
class
->/Library/Java/JavaVirtualMachines/jdk1.
8.0
.jdk/Contents/Home/jre/lib/rt.jar
04
<unnamed>(Deps.
class
)
05
->java.iocompact1
06
->java.langcompact1
07
->java.utilcompact1
08
09
**************VERBOSE********************
10
jdeps-vDeps.
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-RDeps.
class
22
Deps.
class
->/Library/Java/JavaVirtualMachines/jdk1.
8.0
.jdk/Contents/Home/jre/lib/rt.jar
23
<unnamed>(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.jcaJDKinternalAPI(rt.jar)
44
->sun.security.utilJDKinternalAPI(rt.jar)
45
->sun.security.validatorJDKinternalAPI(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.cryptoJDKinternalAPI(jce.jar)
58
sun.security.util(rt.jar)
59
->javax.cryptoJDKinternalAPI(jce.jar)
60
->javax.crypto.interfacesJDKinternalAPI(jce.jar)
61
->javax.crypto.specJDKinternalAPI(jce.jar)


在linux上构建profile

01
$hgclonehttp:
//hg.openjdk.java.net/jdk8/jdk8/
02
$cdjdk8
03
$makeimagesprofiles:
04
##Finishedprofiles(buildtime
00
:
00
:
27
)
05
-----Buildtimes-------
06
Start
2013
-
03
-
17
14
:
47
:
35
07
End
2013
-
03
-
17
14
:
58
:
26
08
00
:
00
:
25
corba
09
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
FinishedbuildingJava(TM)
for
target
'imagesprofiles'
21
$cdimages
22
$ls-d*image
23
j2re-compact1-imagej2re-compact2-imagej2re-compact3-imagej2re-imagej2sdk-image


编译后compact大致的占用空间






总结

如今,物联网正风行一时。我们看到大量不同的设备在市场上出现,每一种的更新速度都越来越快。java需要一个占用资源少的JRE运行环境,紧凑的JRE特性的出现,希望能带来以后的物联网的发展,甚至还是会有大量的java应用程序出现在物联网上面。目前oracle也发布了针对raspberrypi的JRE了。

另外该特性也是为java9的模块化项目做准备,模块化特性是javaer所期待的特性。他是解决业务系统复杂度的一个利器,当然OSGI也是相当的出色。但osgi对于新学者来说未免太复杂了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java