MacOS 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,看是否能打开,不能打开就是网络问题。能打开如下:

MacOS Eclipse使用JOL观察对象布局(详解)_第1张图片

2、把这个网页保存名为brew_install.rb的文件,保存的位置随便,只要自己能找到。

3、终端进入保存的brew_install.rb文件的路径,执行命令:

ruby brew_install.rb

然后等待安装homebrew。

MacOS Eclipse使用JOL观察对象布局(详解)_第2张图片

安装完成,但是有如下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,输入上述路径:

MacOS Eclipse使用JOL观察对象布局(详解)_第3张图片

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

MacOS Eclipse使用JOL观察对象布局(详解)_第4张图片

  • Eclipse中创建maven项目

参考:eclipse创建maven项目(超详细)

MacOS Eclipse使用JOL观察对象布局(详解)_第5张图片

sub的pom中添加jol的依赖:

    
		
			org.openjdk.jol
			jol-core
			0.11-SNAPSHOT
		
	

其中version区域要根据下载的jol/jol-core下的版本确定,否则会出错误。

MacOS Eclipse使用JOL观察对象布局(详解)_第6张图片

可以看到是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

 

你可能感兴趣的:(Java)