让HotSpot生成固定的ReservedSpace地址可以更简单方便的调试汇编代码

nijiaben 2014-07-30
ZHH2009 写道

HotSpot本身就是一个DLL,如果第一次运行HotSpot成功了,第二次通常都失败,然后稍等片刻,运行第3或第4次又好了,在此期间并没有运行其他任何程序。

还有一些native的动态库会被加载
ZHH2009 2014-07-30
nijiaben 写道
ZHH2009 写道

HotSpot本身就是一个DLL,如果第一次运行HotSpot成功了,第二次通常都失败,然后稍等片刻,运行第3或第4次又好了,在此期间并没有运行其他任何程序。

还有一些native的动态库会被加载



这个可以理解,但是你在linux下怎么又正确了呢,linux下也要加载相关的so的啊,只不过windows换成了dll。
ZHH2009 2014-07-30
rink1969 写道
ZHH2009 写道


只不过有一点点缺陷,我用的是windows,
发现没有正确释放requested_address 对应的空间,
导致不是每次重启HotSpot时都成功,多试几次又好了。


这个应该不是没释放的问题
而是这段地址空间被动态库或者其他东西占用了。
可以在链接脚本里面把这段地址空间预留出来,就不会有这样的问题了。


我用的是VisualStudio2012,
从这个Linker Options上 http://msdn.microsoft.com/en-us/library/y0zzbyt4.aspx
并没有找到相关的选项用来预留地址空间。
nijiaben 2014-07-31
ZHH2009 写道
nijiaben 写道
ZHH2009 写道

HotSpot本身就是一个DLL,如果第一次运行HotSpot成功了,第二次通常都失败,然后稍等片刻,运行第3或第4次又好了,在此期间并没有运行其他任何程序。

还有一些native的动态库会被加载



这个可以理解,但是你在linux下怎么又正确了呢,linux下也要加载相关的so的啊,只不过windows换成了dll。

这个要看下mmap的实现了,内核里好像有个get_unmapped_area的函数,这块我也没仔细研究,找时间看下
rink1969 2014-08-01
windows下关闭地址随机化,可以看看这个帖子
http://stackoverflow.com/questions/9560993/how-do-you-disable-aslr-address-space-layout-randomization-on-windows-7-x64

不过我是用linux,没试过上面这些方法

linux平台上只要 echo 0> /proc/sys/kernel/randomize_va_space 就可以关闭操作系统的地址随机化。
然后我们把 java_start 中 下面的代码注释掉了。
  int pid = os::current_process_id();
  alloca(((pid ^ counter++) & 7) * 128);
这段代码看注释是为了随机化栈帧地址,避免cache line冲突。

这样做了之后,每次地址基本上都一样了。
打断点偶尔会造成地址变化,但是我们基本上就是最近两次的比较,这两次打的断点都是一样的,所以也没仔细再看原因。
ZHH2009 2014-08-01
我现在把requested_address从0x01cd0000换成0x7f00000后成功概率超过90%了,
已经足够满足我的调式场景了,相当于重启HotSpot 10次只有一次失败,并且重启一次只要1秒,基本上没有什么效率影响。

有时间再查找一下出现这个问题的具体原因。
nijiaben 2014-08-01
rink1969 写道
windows下关闭地址随机化,可以看看这个帖子
http://stackoverflow.com/questions/9560993/how-do-you-disable-aslr-address-space-layout-randomization-on-windows-7-x64

不过我是用linux,没试过上面这些方法

linux平台上只要 echo 0> /proc/sys/kernel/randomize_va_space 就可以关闭操作系统的地址随机化。
然后我们把 java_start 中 下面的代码注释掉了。
  int pid = os::current_process_id();
  alloca(((pid ^ counter++) & 7) * 128);
这段代码看注释是为了随机化栈帧地址,避免cache line冲突。

这样做了之后,每次地址基本上都一样了。
打断点偶尔会造成地址变化,但是我们基本上就是最近两次的比较,这两次打的断点都是一样的,所以也没仔细再看原因。

和我的做法一样,哈哈,碰到的问题也一样,断点的有无以及多少确实会影响
rink1969 2014-08-04
nijiaben 写道

和我的做法一样,哈哈,碰到的问题也一样,断点的有无以及多少确实会影响

因为我就坐在你旁边啊  
Global site tag (gtag.js) - Google Analytics