優化java編譯,java系統優化

本文目錄一覽:

java 編譯優化問題

java編譯的結果是位元組碼而不是二進制,所以在運行時vm的優化才是重要的,包括VM的回收策略、分配給VM內存的大小都能在一定程度上影響性能。Sun的VM支持熱點編譯,對高頻執行的代碼段翻譯的2進制會進行緩存,這也是VM的一種優化。

IBM JVM處理數學運算速度最快,BEA JVM處理大量線程和網絡socket性能最好,而Sun JVM處理通常的商業邏輯性能最好。不過Hotspot的Server mode被報告有穩定性的問題。

Java 的最大優勢不是體現在執行速度上,所以對Compiler的要求並不如c++那樣高,代碼級的優化還需要程序員本身的功底。

貼個java的運行參數:

Usage: java [-options] class [args…]

(to execute a class)

or java [-options] -jar jarfile [args…]

(to execute a jar file)

where options include:

-client to select the “client” VM

-server to select the “server” VM

-hotspot is a synonym for the “client” VM [deprecated]

The default VM is client.

-cp class search path of directories and zip/jar files

-classpath class search path of directories and zip/jar files

A ; separated list of directories, JAR archives,

and ZIP archives to search for class files.

-Dname=value

set a system property

-verbose[:class|gc|jni]

enable verbose output

-version print product version and exit

-version:value

require the specified version to run

-showversion print product version and continue

-jre-restrict-search | -jre-no-restrict-search

include/exclude user private JREs in the version search

-? -help print this help message

-X print help on non-standard options

-ea[:packagename…|:classname]

-enableassertions[:packagename…|:classname]

enable assertions

-da[:packagename…|:classname]

-disableassertions[:packagename…|:classname]

disable assertions

-esa | -enablesystemassertions

enable system assertions

-dsa | -disablesystemassertions

disable system assertions

-agentlib:libname[=options]

load native agent library libname, e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:pathname[=options]

load native agent library by full pathname

-javaagent:jarpath[=options]

load Java programming language agent, see

java.lang.instrument

-Xmixed mixed mode execution (default)

-Xint interpreted mode execution only

-Xbootclasspath:directories and zip/jar files separated by ;

set search path for bootstrap classes and resources

-Xbootclasspath/a:directories and zip/jar files separated by ;

append to end of bootstrap class path

-Xbootclasspath/p:directories and zip/jar files separated by ;

prepend in front of bootstrap class path

-Xnoclassgc disable class garbage collection

-Xincgc enable incremental garbage collection

-Xloggc:file log GC status to a file with time stamps

-Xbatch disable background compilation

-Xmssize set initial Java heap size

-Xmxsize set maximum Java heap size

-Xsssize set java thread stack size

-Xprof output cpu profiling data

-Xfuture enable strictest checks, anticipating future default

-Xrs reduce use of OS signals by Java/VM (see

documentation)

-Xcheck:jni perform additional checks for JNI functions

-Xshare:off do not attempt to use shared class data

-Xshare:auto use shared class data if possible (default)

-Xshare:on require using shared class data, otherwise fail.

Java虛擬機(JVM)參數配置說明

在Java、J2EE大型應用中,JVM非標準參數的配置直接關係到整個系統的性能。

JVM非標準參數指的是JVM底層的一些配置參數,這些參數在一般開發中默認即可,不需

要任何配置。但是在生產環境中,為了提高性能,往往需要調整這些參數,以求系統達

到最佳新能。

另外這些參數的配置也是影響系統穩定性的一個重要因素,相信大多數Java開發人員都

見過「OutOfMemory」類型的錯誤。呵呵,這其中很可能就是JVM參數配置不當或者就沒

有配置沒意識到配置引起的。

為了說明這些參數,還需要說說JDK中的命令行工具一些知識做鋪墊。

首先看如何獲取這些命令配置信息說明:

假設你是windows平台,你安裝了J2SDK,那麼現在你從cmd控制台窗口進入J2SDK安裝目

錄下的bin目錄,然後運行java命令,出現如下結果,這些就是包括java.exe工具的和

JVM的所有命令都在裏面。

———————————————————————–

D:\j2sdk15\binjava

Usage: java [-options] class [args…]

(to execute a class)

or java [-options] -jar jarfile [args…]

(to execute a jar file)

where options include:

-client to select the “client” VM

-server to select the “server” VM

-hotspot is a synonym for the “client” VM [deprecated]

The default VM is client.

-cp class search path of directories and zip/jar files

-classpath class search path of directories and zip/jar files

A ; separated list of directories, JAR archives,

and ZIP archives to search for class files.

-Dname=value

set a system property

-verbose[:class|gc|jni]

enable verbose output

-version print product version and exit

-version:value

require the specified version to run

-showversion print product version and continue

-jre-restrict-search | -jre-no-restrict-search

include/exclude user private JREs in the version search

-? -help print this help message

-X print help on non-standard options

-ea[:packagename…|:classname]

-enableassertions[:packagename…|:classname]

enable assertions

-da[:packagename…|:classname]

-disableassertions[:packagename…|:classname]

disable assertions

-esa | -enablesystemassertions

enable system assertions

-dsa | -disablesystemassertions

disable system assertions

-agentlib:libname[=options]

load native agent library libname, e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:pathname[=options]

load native agent library by full pathname

-javaagent:jarpath[=options]

load Java programming language agent, see

java.lang.instrument

———————————————————————–

在控制台輸出信息中,有個-X(注意是大寫)的命令,這個正是查看JVM配置參數的命

令。

其次,用java -X 命令查看JVM的配置說明:

運行後如下結果,這些就是配置JVM參數的秘密武器,這些信息都是英文的,為了方便

閱讀,我根據自己的理解翻譯成中文了(不準確的地方還請各位博友斧正)

———————————————————————–

D:\j2sdk15\binjava -X

-Xmixed mixed mode execution (default)

-Xint interpreted mode execution only

-Xbootclasspath:directories and zip/jar files separated by ;

set search path for bootstrap classes and resources

-Xbootclasspath/a:directories and zip/jar files separated by ;

append to end of bootstrap class path

-Xbootclasspath/p:directories and zip/jar files separated by ;

prepend in front of bootstrap class path

-Xnoclassgc disable class garbage collection

-Xincgc enable incremental garbage collection

-Xloggc:file log GC status to a file with time stamps

-Xbatch disable background compilation

-Xmssize set initial Java heap size

-Xmxsize set maximum Java heap size

-Xsssize set java thread stack size

-Xprof output cpu profiling data

-Xfuture enable strictest checks, anticipating future default

-Xrs reduce use of OS signals by Java/VM (see

documentation)

-Xcheck:jni perform additional checks for JNI functions

-Xshare:off do not attempt to use shared class data

-Xshare:auto use shared class data if possible (default)

-Xshare:on require using shared class data, otherwise fail.

The -X options are non-standard and subject to change without notice.

———————————————————————–

JVM配置參數中文說明:

———————————————————————–

1、-Xmixed mixed mode execution (default)

混合模式執行

2、-Xint interpreted mode execution only

解釋模式執行

3、-Xbootclasspath:directories and zip/jar files separated by ;

set search path for bootstrap classes and resources

設置zip/jar資源或者類(.class文件)存放目錄路徑

3、-Xbootclasspath/a:directories and zip/jar files separated by ;

append to end of bootstrap class path

追加zip/jar資源或者類(.class文件)存放目錄路徑

4、-Xbootclasspath/p:directories and zip/jar files separated by ;

prepend in front of bootstrap class path

預先加載zip/jar資源或者類(.class文件)存放目錄路徑

5、-Xnoclassgc disable class garbage collection

關閉類垃圾回收功能

6、-Xincgc enable incremental garbage collection

開啟類的垃圾回收功能

7、-Xloggc:file log GC status to a file with time stamps

記錄垃圾回日誌到一個文件。

8、-Xbatch disable background compilation

關閉後台編譯

9、-Xmssize set initial Java heap size

設置JVM初始化堆內存大小

10、-Xmxsize set maximum Java heap size

設置JVM最大的堆內存大小

11、-Xsssize set java thread stack size

設置JVM棧內存大小

12、-Xprof output cpu profiling data

輸入CPU概要表數據

13、-Xfuture enable strictest checks, anticipating future default

執行嚴格的代碼檢查,預測可能出現的情況

14、-Xrs reduce use of OS signals by Java/VM (see

documentation)

通過JVM還原操作系統信號

15、-Xcheck:jni perform additional checks for JNI functions

對JNI函數執行檢查

16、-Xshare:off do not attempt to use shared class data

儘可能不去使用共享類的數據

17、-Xshare:auto use shared class data if possible (default)

儘可能的使用共享類的數據

18、-Xshare:on require using shared class data, otherwise fail.

儘可能的使用共享類的數據,否則運行失敗

The -X options are non-standard and subject to change without notice.

楚雄java培訓學校告訴你java中的編譯與反編譯?

一、什麼是編譯

1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。

2、用編譯程序產生目標程序的動作。編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。

二、什麼是反編譯

計算機軟件反向工程(Reverseengineering)也稱為計算機軟件還原工程,是指通過對他人軟件的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟件產品所使用的思路、原理、結構、算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。反編譯作為自己開發軟件時的參考,或者直接用於自己的軟件產品中。

三、Java類的編譯與反編譯

我們在最初學習Java的時候,會接觸到兩個命令:javac和java,那個時候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。

class文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然後被連接成單獨的、專門支持特定硬件平台和操作系統的二進制文件。通常情況下,一個平台上的二進制可執行文件不能在其他平台上工作。而Javaclass文件是可以運行在任何支持Java虛擬機的硬件平台和操作系統上的二進制文件。

那麼反編譯呢,就是通過helloworld.class文件得到java文件(或者說是程序員能看懂的Java文件)

四、什麼時候會用到反編譯

1、我們只有一個類的class文件,但是我們又看不懂Java的class文件,那麼楚雄java培訓認為可以把它反編譯成我們可以看得懂的文件。

2、學習Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現細節,我們可以藉助反編譯。

從思路開始 Java如何實現條件編譯的技巧

條件編譯絕對是一個好東西。如在C或Cpp中,可以通過預處理語句來實現條件編譯。代碼如下:

#IFDEF DEBUG#UNDEF DEBUG#ENDIF #define DEBUG #IFDEF DEBUUG /*     code block 1     */#ELSE /*     code block 2   */#ENDIF

但是在JAVA中卻沒有預處理,宏定義這些東西,而有時我們可能需要條件編譯。那麼,在JAVA中,該如何實現條件編譯呢?

我們來看一個例子。

編寫一個helloworld程序。代碼如下:

public class Hello { public static void main(String[] args) { System.out.println(“Hello, world!”); }}

保存為Hello.java並編譯,得到一個class文件,並且觀察到文件大小是417位元組。然後我們對這個文件進行反編譯,用jd-gui。得到代碼如下:

import java.io.PrintStream;public class Hello { public static void main(String[] paramArrayOfString)   { System.out.println(“Hello, world!”); }}

得到這個有什麼用呢?

現在我們再來對源代碼進行修改,修改後的代碼如下。

public class Hello { public static void main(String[] args) { if(false) { System.out.println(“Hello, world!”); } }}

進行編譯,這時我們再看它的大小,只有255位元組。怎樣?想到什麼了吧?沒錯,編譯器會對代碼進行優化,對於條件永遠為false的語句,JAVA編譯器將不會對其生成位元組碼。

如何用JNI技術提高Java的性能詳解

阻礙Java取得廣泛使用的一個首要因素是Java程序的運行效率。Java是介於解釋型和編譯型之間的一種語言,同樣的程序,假如用編譯型語言C來實現,其運行速度通常要比Java快一倍以上。Java具有平台無關性,這使人們在開發企業級使用的時刻總是把它作為首要候選方案之一,但是性能方面的因素又大大削弱了它的競爭力。為此,提高Java的性能就顯得十分主要。 疑問的提出 Sun公司及Java的支撐者們為提高Java的運行速度已經做出了許多全力,其中大多數集中在程序設計的要領和模式挑選方面。由於算法和設計模式的優化是通用的,對Java有效的優化算法和設計模式,對其他編譯語言也基本同樣適用,因此無法從根本上改動 Java程序與編譯型語言在執行效率方面的差別。 JIT(Just In Time,及時編譯)技能是個比較好的思想。它的基本原理是:最先議決 Java編譯器把Java源代碼編譯成平台無關的二進制位元組碼。然後在Java程序真實執行之前,系統議決 JIT編譯器把Java的位元組碼編譯為本地化機器碼。結尾,系統執行本地化機器碼,節省了對位元組碼實行解釋的時間。這樣做的優點是大大提高了Java程序的性能,縮短了加載程序的時間;同時,由於編譯的結果並不在程序運行間保存,因此也節約了存儲空間。缺點是由於JIT編譯器對所有的代碼都想優化,因此同樣也佔用了許多時間。 動態優化技能是提高Java性能的另一個嘗試。該技能試圖議決把Java源程序直接編譯成機器碼,以充分使用 Java動態編譯和靜態編譯技能來提高Java的性能。該要領把輸入的Java源碼或位元組碼轉換為經歷高度優化的可執行代碼和動態庫 (Windows中的. dll文件或Unix中的. so文件)。該技能能大大提高程序的性能,但卻破壞了Java的可移植性。 JNI技能 實際上,有一種通常為咱們忽視的技能能夠在很大程度上處理這個難題,那就是JNI(Java Native Interface, Java本地化要領 )。主張採用純Java的人們通常反對本地化代碼的運用,他們認為在Java程序執行的流程中調用C/C++程序會影響程序的可移植性和安全性。還有一些人認為JNI只是對過去混合編程技能的基本擴展,本來際目標是為了充分使用大量原有的C程序庫。 本來,咱們不必拘泥於嚴格的平台獨立性限定,因為採用JNI技能只是針對一些嚴重影響Java性能的代碼段,該部分可能只佔源程序的極少部分,所以幾乎能夠不思慮該部分代碼在主流平台之間移植的工作量。同時,也不必過分擔心類型匹配疑問,咱們完全能夠控制代碼不出現這種不正確。此外,也不必擔心安全控制疑問,因為Java安全模型已擴展為準許非系統類加載和調用本地點法。根據Java規範,從JDK 1. 2開始,FindClass將設法找到與當前的本地點法關聯的類加載器。假如平台有關代碼屬於一個系統類,則無需涉及任何類加載器; 否則,將調用適當的類加載器來加載和鏈接已命名的類。換句話說,假如在Java程序中直接調用C/C++語言產生的機器碼,該部分代碼的安全性就由Java虛擬機控制。

原創文章,作者:DFGC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/132743.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DFGC的頭像DFGC
上一篇 2024-10-03 23:54
下一篇 2024-10-03 23:54

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論