在对Solaris SPARC盒子上的一些Java代码进行基准测试时,我注意到我第一次调用基准测试函数时,它运行得很慢(10倍差异):
为什么是这样?我怀疑是JIT编译器,有没有办法验证这个?
编辑:根据一些答案,我想澄清一下,这段代码是最简单的测试案例,我可以找到展示这种行为.所以我的目标不是让它快速运行,而是要了解发生了什么,所以我可以在我真正的基准测试中避免它.
解决: Tom Hawtin正确地指出我的"慢"时间实际上是合理的.根据这一观察,我将调试器附加到Java进程.在第一个中,内循环看起来像这样:
0xf9037218: cmp %l0, 100
0xf903721c: bge,pn %icc,0xf90371f4 ! 0xf90371f4
0xf9037220: nop
0xf9037224: ld [%l3 + 92], %l2
0xf9037228: ld [%l2 + 8], %l6
0xf903722c: add %l6, 1, %l5
0xf9037230: st %l5, [%l2 + 8]
0xf9037234: inc %l0
0xf9037238: ld [%l1], %g0
0xf903723c: ba,pt %icc,0xf9037218 ! 0xf9037218
Run Code Online (Sandbox Code Playgroud)
在接下来的迭代中,循环如下所示:
0xf90377d4: sub %l2, %l0, %l3
0xf90377d8: add %l3, %l0, %l2
0xf90377dc: add %l2, …Run Code Online (Sandbox Code Playgroud) 我的服务器server.example.com无法从Internet访问.但是,有一个可访问的HTTP代理proxy.example.com,它可以与服务器通信.
如果用户将其浏览器配置为通过proxy.example.com获取*.example.com,或使用我提供的代理autoconfig文件,则他们可以访问服务器(在使用代理进行身份验证后).我想避免让他们完成这个手动过程.
是否可以通过编程方式执行此操作?JavaScript将通过可访问Internet的www.example.com网站提供,因此似乎没有一个安全问题会使原则上无法实现.
我的约束是proxy.example.com是一个HTTP代理,我无法触摸它.我只控制server.example.com和www.example.com,我的网络应用程序只能在server.example.com上运行.