论坛首页 Java企业应用论坛

吹牛:我写的JSONParser可能是这个星球上最快了(Java)

浏览 143281 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-12-22  
neverforget 写道
请LZ证明“自古才子多风骚”,把开源的代码放出来,让大家见证下你多有才,多风骚!

  对啊。。只闻其声,不见其人啊。。
0 请登录后投票
   发表时间:2010-12-22  
吹牛吧,一行代码没看着
0 请登录后投票
   发表时间:2010-12-22  
感觉阿里人才好多。
0 请登录后投票
   发表时间:2010-12-22  
等源代码,准备试试看 ^_^
0 请登录后投票
   发表时间:2010-12-22  
LZ  期待你的source code 啊 赶紧上源码吧
0 请登录后投票
   发表时间:2010-12-22  
LZ,你放图不放种,菊花被熊捅哦
0 请登录后投票
   发表时间:2010-12-22   最后修改:2010-12-22
谢谢校长进行codereview,指出了其中isDigit函数的问题,尝试多种办法测试之后,发现综合最快的是范围判断。linux kernel的isDigit算法,在Java中性能不稳定,只是在Windows XP 32bit JVM中-client参数时最快,其他测试环境都慢。

最终采用的实现如下,很简单的:
public final boolean isDigit(char ch) {
return ch >= '0' && ch <= '9';
}

linux kernel的isDigit算法如下:
private static final boolean[] digitBits = new boolean[256];
static {
for (char ch = '0'; ch <= '9'; ++ch) {
digitBits[ch] = true;
}
}
public final boolean isDigit(char ch) {
return digitBits[ch];
}
这是典型的空间换时间的思路,但在java中,这是性能不稳定的算法,估计是hotspot搞鬼了。

这次调整之后,性能又提升了几个百分点。

0 请登录后投票
   发表时间:2010-12-22   最后修改:2010-12-22
wenshao 写道
谢谢校长进行codereview,指出了其中isDigit函数的问题,尝试多种办法测试之后,发现综合最快的是范围判断。linux kernel的isDigit算法,在Java中性能不稳定,只是在Windows XP 32bit JVM中-client参数时最快,其他测试环境都慢。

最终采用的实现如下,很简单的:
public final boolean isDigit(char ch) {
return ch >= '0' && ch <= '9';
}

linux kernel的isDigit算法如下:
private static final boolean[] digitBits = new boolean[256];
static {
for (char ch = '0'; ch <= '9'; ++ch) {
digitBits[ch] = true;
}
}
public final boolean isDigit(char ch) {
return digitBits[ch];
}
这是典型的空间换时间的思路,但在java中,这是性能不稳定的算法,估计是hotspot搞鬼了。

这次调整之后,性能又提升了几个百分点。


请教一下,为什么不能用Character.isDigit(c),也是因为性能吗?
0 请登录后投票
   发表时间:2010-12-22  
sky3380 写道
wenshao 写道
谢谢校长进行codereview,指出了其中isDigit函数的问题,尝试多种办法测试之后,发现综合最快的是范围判断。linux kernel的isDigit算法,在Java中性能不稳定,只是在Windows XP 32bit JVM中-client参数时最快,其他测试环境都慢。

最终采用的实现如下,很简单的:
public final boolean isDigit(char ch) {
return ch >= '0' && ch <= '9';
}

linux kernel的isDigit算法如下:
private static final boolean[] digitBits = new boolean[256];
static {
for (char ch = '0'; ch <= '9'; ++ch) {
digitBits[ch] = true;
}
}
public final boolean isDigit(char ch) {
return digitBits[ch];
}
这是典型的空间换时间的思路,但在java中,这是性能不稳定的算法,估计是hotspot搞鬼了。

这次调整之后,性能又提升了几个百分点。


请教一下,为什么不能用Character.isDigit(c),也是因为性能吗?


为啥是256个呢?不就只要判断0-9就行了么?
0 请登录后投票
   发表时间:2010-12-22  
sky3380 写道
wenshao 写道
谢谢校长进行codereview,指出了其中isDigit函数的问题,尝试多种办法测试之后,发现综合最快的是范围判断。linux kernel的isDigit算法,在Java中性能不稳定,只是在Windows XP 32bit JVM中-client参数时最快,其他测试环境都慢。

最终采用的实现如下,很简单的:
public final boolean isDigit(char ch) {
return ch >= '0' && ch <= '9';
}

linux kernel的isDigit算法如下:
private static final boolean[] digitBits = new boolean[256];
static {
for (char ch = '0'; ch <= '9'; ++ch) {
digitBits[ch] = true;
}
}
public final boolean isDigit(char ch) {
return digitBits[ch];
}
这是典型的空间换时间的思路,但在java中,这是性能不稳定的算法,估计是hotspot搞鬼了。

这次调整之后,性能又提升了几个百分点。


请教一下,为什么不能用Character.isDigit(c),也是因为性能吗?

正确,那个性能很差的!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics