tag:blogger.com,1999:blog-405440534643619078.comments2014-09-19T21:53:24.832-07:00Daniel's BlogAnonymoushttp://www.blogger.com/profile/17755999827557861281noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-405440534643619078.post-82390742947994766962011-04-28T20:01:23.975-07:002011-04-28T20:01:23.975-07:00The previous results were on a 4-core Mac Book Pro...The previous results were on a 4-core Mac Book Pro. I execute the test again on a 16-core xeon Linux server, pretty much the same result.Anonymoushttps://www.blogger.com/profile/17755999827557861281noreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-4267348045793690292009-01-16T19:22:00.000-08:002009-01-16T19:22:00.000-08:00呵呵,我是搞SM/SC和BTO产品集成方案的。这个就是简单的测试一下单向和双向SSL官方文档写的比较...呵呵,我是搞SM/SC和BTO产品集成方案的。<BR/>这个就是简单的测试一下单向和双向SSL<BR/>官方文档写的比较杂Anonymoushttps://www.blogger.com/profile/17755999827557861281noreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-25106727932876395182009-01-16T16:07:00.000-08:002009-01-16T16:07:00.000-08:00运行了一下你的test, 没太弄明白是测试什么的, 难道就是https? 有时间交流一下:http:...运行了一下你的test, 没太弄明白是测试什么的, 难道就是https? <BR/><BR/>有时间交流一下:<BR/>http://www.vanspace.com/space.php?uid=2&do=blog&id=41Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-83047762375047011452009-01-16T15:46:00.000-08:002009-01-16T15:46:00.000-08:00才发现你我是同行,都是搞SM 7的.才发现你我是同行,都是搞SM 7的.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-65597244435381099722009-01-04T08:19:00.000-08:002009-01-04T08:19:00.000-08:00select for update应该是获得RS锁,但是我测试下来,因为select for udp...select for update应该是获得RS锁,但是我测试下来,因为select for udpate会给行级别加X锁,所以表锁会自动升级到RX,而不是RS。有人知道为什么这个表格中select for update是RS么?Anonymoushttps://www.blogger.com/profile/17755999827557861281noreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-39005795084717924992008-09-26T05:56:00.000-07:002008-09-26T05:56:00.000-07:00我只知道这个是JRE6先加入的,然后back port到1.5的某个update里的,照你这么说,应...我只知道这个是JRE6先加入的,然后back port到1.5的某个update里的,照你这么说,应该差不多<BR/>我觉得这个优化不同于biased lock,对于biased lock如果不能关闭那么会导致一个程序在不同JRE上非常大的行为差别<BR/>而这个优化是安全的,不会有任何副作用Anonymoushttps://www.blogger.com/profile/17755999827557861281noreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-55031166407251467952008-09-26T02:26:00.000-07:002008-09-26T02:26:00.000-07:00小强,我查了一下官方文档,这个虚拟机参数在jdk1.5.06上加入的. JDK1.5默认是关闭的,所...小强,我查了一下官方文档,这个虚拟机参数在jdk1.5.06上加入的. JDK1.5默认是关闭的,所以在jdk1.5上有和没有这个参数差别挺大的,但是JDK6的测试中,这个参数默认应该是打开的,并且我感觉没有方法关闭它。<BR/><BR/>这个论坛上有个程序,我试了一下,在java5上面差别蛮大的。<BR/><BR/>http://forums.java.net/jive/thread.jspa?messageID=162813<BR/><BR/>public class TestEscapeAnalysis {<BR/> private static final int COUNT = 100000000;<BR/> public static void main(String[] args) throws Exception {<BR/> for (int i = 0; i < 20; i++) {<BR/> test();<BR/> }<BR/> }<BR/> private static void test() {<BR/> int x = 0;<BR/> long ts = System.currentTimeMillis();<BR/> Object lock = new Object();<BR/> for (int i = 0; i < COUNT; i++) {<BR/> synchronized (lock) {<BR/> x++;<BR/> }<BR/> }<BR/> long te = System.currentTimeMillis();<BR/> System.out.println(x + ", time=" + (te - ts) / 1.0);<BR/> }<BR/>}<BR/><BR/>测试结果:无参数<BR/><BR/>100000000, time=5078.0<BR/>100000000, time=4282.0<BR/>100000000, time=4687.0<BR/>100000000, time=4359.0<BR/>100000000, time=4110.0<BR/>100000000, time=4094.0<BR/>100000000, time=3796.0<BR/>100000000, time=4469.0<BR/>100000000, time=4828.0<BR/>100000000, time=4188.0<BR/>100000000, time=3969.0<BR/>100000000, time=4390.0<BR/>100000000, time=4375.0<BR/>100000000, time=4360.0<BR/>100000000, time=4531.0<BR/>100000000, time=4375.0<BR/>100000000, time=4922.0<BR/>100000000, time=3968.0<BR/>100000000, time=4407.0<BR/>100000000, time=4375.0<BR/><BR/>-XX:+UseBiasedLocking<BR/><BR/>100000000, time=5296.0<BR/>100000000, time=579.0<BR/>100000000, time=578.0<BR/>100000000, time=547.0<BR/>100000000, time=453.0<BR/>100000000, time=484.0<BR/>100000000, time=578.0<BR/>100000000, time=485.0<BR/>100000000, time=578.0<BR/>100000000, time=562.0<BR/>100000000, time=406.0<BR/>100000000, time=484.0<BR/>100000000, time=469.0<BR/>100000000, time=453.0<BR/>100000000, time=578.0<BR/>100000000, time=563.0<BR/>100000000, time=406.0<BR/>100000000, time=547.0<BR/>100000000, time=562.0<BR/>100000000, time=485.0James Zhenghttps://www.blogger.com/profile/05459137755175782492noreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-55424151077283362502008-09-26T00:09:00.000-07:002008-09-26T00:09:00.000-07:00小胖, 那个latch不错,我按照你的建议改了一下代码不过nanoTime意义不太大,我记得Win3...小胖, 那个latch不错,我按照你的建议改了一下代码<BR/>不过nanoTime意义不太大,我记得Win32SDK里面说Windows分时只能达到15ms的准确度,包括2.6的linux目前也达不到纳秒级别,不过JDK doc里建议用这个,以后硬件可以跟得上的话也行。<BR/>另外10e6=10^7 :-)<BR/><BR/>这个虚拟机参数只在JRE6上才有效果,JRE5上你尝试没有报错?Anonymoushttps://www.blogger.com/profile/17755999827557861281noreply@blogger.comtag:blogger.com,1999:blog-405440534643619078.post-74853102161265030802008-09-25T22:36:00.000-07:002008-09-25T22:36:00.000-07:00小强,在JDK5以上,System.nanoTime() 会比 System.currentTime...小强,在JDK5以上,System.nanoTime() 会比 System.currentTimeMillis() 准确很多 。它计算出的时间是以纳秒计(1ns = 1e-9s). 另外,在main thread中,是否因为测试需要才使用忙等待的. 如果不是,我建议把它改为线程同步方式。<BR/>public class BiasedLockTest {<BR/> public static final long t1 = System.nanoTime();<BR/> public static volatile long t2;<BR/> static {<BR/> System.out.println(t1 / 1e6);<BR/> }<BR/> public static void main(String[] args) {<BR/> Object lock = new Object();<BR/> TestThread[] threads = new TestThread[100];<BR/> for (int i = 0; i < 100; i++) {<BR/> threads[i] = new TestThread(i, lock);<BR/> }<BR/> for (int i = 0; i < 100; i++) {<BR/> threads[i].start();<BR/> }<BR/> for (int i = 0; i < 100; i++) {<BR/> try {<BR/> threads[i].join();<BR/> } catch (InterruptedException e) {<BR/> e.printStackTrace();<BR/> }<BR/> }<BR/> System.out.println(t2 / 1e6);<BR/> System.out.println((t2 - t1) / 1e6 + " ms used!");<BR/> }<BR/>}<BR/>class TestThread extends Thread {<BR/> private final Object lock;<BR/> private final int id;<BR/> public TestThread(int id, Object lock) {<BR/> this.lock = lock;<BR/> this.id = id;<BR/> }<BR/> @Override<BR/> public void run() {<BR/> for (int i = 0; i < 10000; i++) {<BR/> synchronized (lock) {<BR/> int k = 0;<BR/> k = k + 1;// dummy calculation<BR/> }<BR/> }<BR/> BiasedLockTest.t2 = System.nanoTime();<BR/> // System.out.println("Thread " + id + " is dead!");<BR/> }<BR/>}<BR/><BR/>在JDK5以上的版本,还可以通过CountDownLatch这样方便的类来实现这类同步:<BR/><BR/>import java.util.concurrent.CountDownLatch;<BR/>public class BiasedLockTest {<BR/> public static final long t1 = System.nanoTime();<BR/> public static volatile long t2;<BR/> static {<BR/> System.out.println(t1 / 1e6);<BR/> }<BR/> public static void main(String[] args) {<BR/> Object lock = new Object();<BR/> TestThread[] threads = new TestThread[100];<BR/> CountDownLatch latch = new CountDownLatch(threads.length);<BR/> for (int i = 0; i < 100; i++) {<BR/> threads[i] = new TestThread(i, lock, latch);<BR/> }<BR/> for (int i = 0; i < 100; i++) {<BR/> threads[i].start();<BR/> }<BR/> try {<BR/> latch.await();<BR/> } catch (InterruptedException e) {<BR/> e.printStackTrace();<BR/> }<BR/> System.out.println(t2 / 1e6);<BR/> System.out.println((t2 - t1) / 1e6 + " ms used!");<BR/> }<BR/>}<BR/>class TestThread extends Thread {<BR/> private final Object lock;<BR/> private final int id;<BR/> private final CountDownLatch latch;<BR/> public TestThread(int id, Object lock, CountDownLatch latch) {<BR/> this.lock = lock;<BR/> this.id = id;<BR/> this.latch = latch;<BR/> }<BR/> @Override<BR/> public void run() {<BR/> for (int i = 0; i < 10000; i++) {<BR/> synchronized (lock) {<BR/> int k = 0;<BR/> k = k + 1;// dummy calculation<BR/> }<BR/> }<BR/> BiasedLockTest.t2 = System.nanoTime();<BR/> latch.countDown();<BR/> // System.out.println("Thread " + id + " is dead!");<BR/> }<BR/>}<BR/><BR/><BR/>我试着测试了一下这个虚拟机参数,在JDK1.5上没有发现显著的区别。James Zhenghttps://www.blogger.com/profile/05459137755175782492noreply@blogger.com