国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

編寫高級應(yīng)用程序1

2019-11-18 15:12:26
字體:
供稿:網(wǎng)友

  新的javaTM 虛擬機(VMs)具有能夠提高性能的特點, 并且你可以使用許多工具來提高應(yīng)用程序的性能或減小一般類文件的尺寸。這種Java虛擬機的特性和工具可使你在不改變應(yīng)用程序、或?qū)?yīng)用程序僅做很小改動的情況下, 提高應(yīng)用程序的性能。

  Java虛擬機的特性

  Java2與過去的版本相比, 性能已有很大提高, 其中包括更快的內(nèi)存分配、類尺寸的減小、垃圾收集的改善、最新型的監(jiān)控器和作為標準的內(nèi)聯(lián)JIT技術(shù)。當使用新的Java2虛擬機時, 你會看到這種性能的改善; 然而, 假如你能夠理解速度是如何提高的, 你就能夠調(diào)整你的應(yīng)用程序, 以充分挖掘每一點性能潛力。
方法內(nèi)聯(lián)
Java虛擬機的Java2版可在運行時自動內(nèi)聯(lián)簡單方法。在一個未優(yōu)化的Java虛擬機中,每調(diào)用一次新的方法,就創(chuàng)建一個新的堆棧幀(stack frame)。創(chuàng)建一個新的堆棧幀需要一些額外的資源以及該棧的某些再映射(re-mapping),其結(jié)果將導(dǎo)致系統(tǒng)開銷的少許增加。

  由于方法內(nèi)聯(lián)可在你的程序中減少方法調(diào)用的次數(shù),因而可提高性能。Java虛擬機內(nèi)聯(lián)代碼內(nèi)聯(lián)了返回常數(shù)或僅訪問內(nèi)部域(internal fields)的方法。為了利用方法內(nèi)聯(lián),你可以從以下兩件事中選做其一;即:你可以使一個方法對虛擬機所要執(zhí)行的內(nèi)聯(lián)看上去是有吸引力的,或者你可以手工內(nèi)聯(lián)一個方法,只要它不破壞你的對象模型。在這一語境中的手工內(nèi)聯(lián)意味著可以直接從一個方法中將代碼移動到正在調(diào)用該方法的方法中。

下面的小例子演示了虛擬機的自動方法內(nèi)聯(lián):
public class InlineMe {

int counter=0;

public void method1() {
for(int i=0;i<1000;i++)
addCount();
System.out.}

public int addCount() {
counter=counter+1;
return counter;
}

public static void main(String args[]) {
InlineMe im=new InlineMe();
im.method1();
}
}

  在當前狀態(tài),addCount方法對虛擬機中的內(nèi)聯(lián)探測器顯得是沒有吸引力的,因為addCount方法返回一個值。要發(fā)現(xiàn)該方法是否被內(nèi)聯(lián):

java -Xrunhprof:cpu=times InlineMe

它生成一個java.hprof.txt輸出文件。前十個方法類似下面的結(jié)果:

CPU TIME (ms) BEGIN (total = 510) Thu Jan 28 16:56:15 1999
rank self accum count trace method
1 5.88% 5.88% 1 25 java/lang/Character.
2 3.92% 9.80% 5808 13 java/lang/String.charAt
3 3.92% 13.73% 1 33 sun/misc/Launcher$AppClassLoader.getPermissions
4 3.92% 17.65% 3 31 sun/misc/URLClassPath.getLoader
5 1.96% 19.61% 1 39 java/net/URLClassLoader.
access$1
6 1.96% 21.57% 1000 46 InlineMe.addCount
7 1.96% 23.53% 1 21 sun/io/Converters.newConverter
8 1.96% 25.49% 1 17 sun/misc/Launcher$ExtClassLoader.getExtDirs
9 1.96% 27.45% 1 49 java/util/Stack.peek
10 1.96% 29.41% 1 24 sun/misc/Launcher.

假如你將addCount方法改變?yōu)椴辉俜祷匾粋€值,則虛擬機可在運行時將其內(nèi)聯(lián)。為使內(nèi)聯(lián)代碼更友好,應(yīng)用下面的程序替換addCount方法:

public void addCount() {
counter=counter+1;
}

再次運行profiler:

java -Xrunhprof:cpu=times InlineMe

這次,java.hprof.txt的輸出應(yīng)該顯得是不同的。
AddCount方法已經(jīng)消失。它已被內(nèi)聯(lián)了!

CPU TIME (ms) BEGIN (total = 560) Thu Jan 28 16:57:02 1999
rank self accum count trace method
1 5.36% 5.36% 1 27 java/lang/Character.
2 3.57% 8.93% 1 23 java/lang/System.initializeSystemClass
3 3.57% 12.50% 2 47 java/io/PrintStream.
4 3.57% 16.07% 5808 15 java/lang/String.charAt
5 3.57% 19.64% 1 42 sun/net/www/protocol/file/Handler.openConnection
6 1.79% 21.43% 2 21 java/io/InputStreamReader.fill
7 1.79% 23.21% 1 54 java/lang/Thread.
8 1.79% 25.00% 1 39 java/io/PrintStream.write
9 1.79% 26.79% 1 40 java/util/jar/JarFile.getJarEntry
10 1.79% 28.57% 1 38 java/lang/Class.forName0

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 雅江县| 德令哈市| 比如县| 淮南市| 江陵县| 多伦县| 原阳县| 长治市| 洪雅县| 黄山市| 郧西县| 湘西| 将乐县| 通海县| 新河县| 准格尔旗| 曲阜市| 遂宁市| 珠海市| 林州市| 庄河市| 游戏| 屯昌县| 巫山县| 通河县| 颍上县| 逊克县| 克山县| 连江县| 松江区| 乌海市| 东平县| 嘉兴市| 明溪县| 隆尧县| 贵定县| 东港市| 黄浦区| 孝义市| 海盐县| 普兰店市|