目錄
最近想利用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
翻譯爲中文的步驟是:
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項目
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