MAC Eclipse使用JOL觀察對象佈局(詳解)

 

目錄

安裝Homebrew

下載JOL源碼

安裝Maven

Eclipse中配置maven

Eclipse中創建maven項目


最近想利用Eclipse查看Java對象的佈局情況,於是在MAC上下載了Eclipse(MAC版eclipse下載地址),該Eclipse下載安裝即可使用,然後開啓了漫長的環境搭建之路......

根據官網openjdk-jol使用手冊,主要有如下幾步:

  • 安裝Homebrew

使用如下命令安裝homebrew:

$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

執行該命令出現錯誤:

curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused

有效解決方案:https://stackoverflow.com/questions/29910217/homebrew-installation-on-mac-os-x-failed-to-connect-to-raw-githubusercontent-com

翻譯爲中文的步驟是:

1、先在瀏覽器輸入這個地址:https://raw.githubusercontent.com/Homebrew/install/master/install,看是否能打開,不能打開就是網絡問題。能打開如下:

2、把這個網頁保存名爲brew_install.rb的文件,保存的位置隨便,只要自己能找到。

3、終端進入保存的brew_install.rb文件的路徑,執行命令:

ruby brew_install.rb

然後等待安裝homebrew。

安裝完成,但是有如下warning:

且brew命令還是找不到。

需要修改系統配置:

sudo vim .bash_profile

添加

"export PATH=/usr/local/bin:$PATH"

保存修改,使用如下命令使配置生效:

source .bash_profile

然後就可以執行brew命令,同時hg命令也可以執行了。

  • 下載JOL源碼

$ hg clone http://hg.openjdk.java.net/code-tools/jol/ jol

下載完成後,執行如下命令:

$ cd jol/
$ mvn clean install

出現錯誤,提示:

mvn:command  not found

即需要先安裝Maven。

  • 安裝Maven

使用brew命令安裝maven:

brew install maven

安裝成功後,使用命令:

mvn -v

查看maven是否安裝成功。安裝成功如下:

再回到jol目錄執行

$ mvn clean install

過程中出現了幾次錯誤,關閉terminal,再重新執行命令就可以成功,mvn命令可以執行。

  • Eclipse中配置maven

通過mvn -v命令查看maven的安裝位置,如上可以看到安裝位置:/usr/local/Cellar/3.6.3_1/libexec。

打開Eclipse,Preferences->Maven->Installations->Add,輸入上述路徑:

 在Preferences->Maven->User Settings的Global Settings中添加如下settings.xml:

  • Eclipse中創建maven項目

參考:eclipse創建maven項目(超詳細)

sub的pom中添加jol的依賴:

    <dependencies>
		<dependency>
			<groupId>org.openjdk.jol</groupId>
			<artifactId>jol-core</artifactId>
			<version>0.11-SNAPSHOT</version>
		</dependency>
	</dependencies>

其中version區域要根據下載的jol/jol-core下的版本確定,否則會出錯誤。

可以看到是0.11-SNAPSHOT。

然後運行如下sample code:

package sub;

import java.util.ArrayList;
import java.util.List;

import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.info.GraphLayout;

public class JOL_Test {

	public static void main(String[] args) {
		
		char o ='2';
		System.out.println("maureen test:" + ClassLayout.parseInstance(o).toPrintable());
    }
}

運行結果:

maureen test:java.lang.Character object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 be 91 b9 (00000001 10111110 10010001 10111001) (-1181630975)
      4     4        (object header)                           3e 00 00 00 (00111110 00000000 00000000 00000000) (62)
      8     4        (object header)                           24 09 00 00 (00100100 00001001 00000000 00000000) (2340)
     12     2   char Character.value                           2
     14     2        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 2 bytes external = 2 bytes total

 

發佈了155 篇原創文章 · 獲贊 48 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章