JAVA虛擬機器學習1---OpenJDK的編譯__JAVA

來源:互聯網
上載者:User
-------《C++編程思想》編程準則1:首先讓程式運行,然後追求速度。即使我們確定這一段程式非常重要,而且是我們系統中的瓶頸。不要最佳化,首先用儘可能簡單的設計使程式可以運行,如果速度不滿足要求,再對其進行分析。我們總是能夠發現“我們的”瓶頸並不是問題所在,節省我們的時間做真正有意義上的事。


                                OpenJDK的編譯


  一 OpenJDK

      OpenJDK是JDK的開放源碼版本,是java語言的發明公司Sun Microsystems. Inc,成立的一個開源項目。由於版本關係,導致openJdk原始碼不完整,所以它的功能要遠少於SUN JDK,不包含:Brower Plugin,Java web Start,以及java控制台,這些功能在OpenJDk中是找不到的,這些不能開往的原始碼,以外掛程式的形式提供給OpenJDK編譯時間使用,OpenJDK6的時候,Icedtea項目給它這些不完整的部分開發了相同功能的原始碼。開始和SunJDK一樣完整。另外注意的是,OpenJDK只包含最精簡的JDK,如果使用Icetea補丁的OpenJDK, openJDK 命令“java -version”顯示的不是OpenJDK,而是java.
二 安裝環境準備      本文選用的是在virtualbox中,使用ubuntu 14.04 32位版本鏡像,主系統是ubuntu 16.04 64位,為什麼我本來真機就是ubuntu ,還要安裝個虛擬機器。閑得慌。這個後面說。使用linux系統(ubuntu)進行構建,是相當方便的,天生具備各種工具鏈,如果使用window,要到處找c++編譯器,以及各種缺失的編譯所要的工具包和編譯環境,安裝一個普通jdk,或者openjdk到系統上,配置好JAVA_HOME,JRE_HOME,CLASSPATH。這是我的配置:

 export JAVA_HOME=/opt/jdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
為什麼要安裝一個新的JDK在機器上,後面有說。

三 安裝步驟   原始碼下載有兩種方式,A是直接下整包原始碼 B 使用OPENJDK 官方提供的工具Mercurial(hg)類似git進行下載
A 直接下整包原始碼,好處是快方便省事,不好的地方是看不到官方修改的release not.不過,還是建議用這種方式,因為B方式,有很多時候,是下載不下來的,不知道原因。
  直接到網址:http://download.java.net/openjdk/jdk8/

B 使用Mercurial(hg).下載
  OpenJDK的源檔案版本庫基於Mercurial(hg),它是一個與Git相似的分布式版本控制工具。在Ubuntu中安裝Mercurial只需要執行命令
 ---安裝版本管理工具
1)  $ sudo apt-get install mercurial -y
---下載OpenJDK 架構    
2)  $ hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev/ jdk8-src
---進入架構目錄
3)  $ cd jdk8-src
----OpenJDK的原始碼版本庫實際上包含多個獨立的子版本庫,需要執行如下指令碼去分別下載各個子版本庫的原始碼,
4)  $ sh get_source.sh
# Repositories:  corba jaxp jaxws langtools jdk hotspot nashorn
    ....
         
四 構建     1) 設定環境變數

    首先,要說一下,構建openJDK要一個藥引,這個藥引叫boot jdk,這個工具一般已經整合在普通的jdk中了,所以,安裝一個普通的JDK到系統上,然後配置好環境變數就好。然後繼續在.bashrc 裡邊添加以下變數。

    

export USE_PRECOMPILED_HEADER=trueexport SKIP_DEBUG_BUILD=false  export SKIP_FASTDEBUG_BUILD=true  export DEBUG_NAME=debug   export LANG=C   unset CLASSPATH  unset JAVA_HOME

  2) 配置編譯環境    $ sh configure 或者 bash configure
該過程會檢測構建環境是否符合要求,如有問題,它會給出提示。比如,
configure: error: Could not find X11 libraries. You might be able to fix this by running 'sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev'.
後面可能,大部分還有繼續安裝的缺失的工具,都可以通過提示apt安裝即可。每次安裝完畢,再次重新執行上述configure命令,直到沒有報錯為止。不要使用apt安裝ccashe,ubuntu的軟體庫裡,這個軟體太舊了。

   3) 安裝高速C/C++編譯工具(ccache)      https://ccache.samba.org/
   在處理一些規模相對較大的工程時,編譯花費的時間可能會很長。有時候我們會經常一遍一遍地編譯相同的程式,此時,有了ccache情況就好多了。它將在第一遍編譯時間多花幾秒鐘,但接下來就會使編譯成倍(5-10倍)的提速。
   下載源碼包後,解壓縮,進入包。執行以下命令:
    $./configure
    $make
    $make install
    $sudo cp ccache /usr/local/bin/
    $sudo ln -s ccache /usr/local/bin/gcc
    $sudo ln -s ccache /usr/local/bin/g++
    $sudo ln -s ccache /usr/local/bin/cc
    $sudo ln -s ccache /usr/local/bin/c++

 4) 回到openJDK源碼包內進行構建執行以下命令     $make all DEBUG_BINARIES=true
    接下來就是慢長的等待,快的20分鐘,我的由於是虛擬機器,機器cpu又比較慢,用了40分鐘。

     完成後,在當前路徑下會產生一個build目錄,構建好的JDK就在那裡面。新JDK的具體路徑類似於build/linux-x86-normal-server-release/jdk/bin。可以執行如下命令去測試這個JDK,這是我修改了JVM後,加入了自己的名字定製的,哈哈。


 
五 後記:       當時我的機器是ubuntu 16.04 64位,不論怎麼構建,都出錯,google了一下,沒有碰到中國人有說到過這問題,只發現2013年-2014年有幾個老外的貼提起過,其中是一個是debian系統的測試員,今天我還特地寫了信問他,不知道這個人離職沒有。。。。下面這個link是debian的bug系統裡那個問題,也是我碰到的問題。
  https://lists.debian.org/debian-java/2014/05/msg00024.html
      所以,最後,我只能在ubuntu 裡邊使用虛擬機器,重新安裝了一個32位的低版本的14.04,然後就沒問題了。可能是g++過高。

  

續:

       後電腦重裝ubuntu 14.04 64位,全程無問題。看來編譯OpenJdk實在很挑剔環境。


 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.