打字猴:1.700452237e+09
1700452237
1700452238 }else{
1700452239
1700452240 //登录不成功,记录日志
1700452241
1700452242 log.warn(userName+”,登录失败!”)
1700452243
1700452244 }
1700452245
1700452246 }
1700452247
1700452248 }
1700452249
1700452250 这是一个早期Web应用的典型验证代码,先验证用户是否登录成功,然后决定是否向Session中写入信息。在该BBS系统中,分析发现login和sign操作都非常耗时,那就首先跟踪login,代码如下:
1700452251
1700452252 class LoginBiz{
1700452253
1700452254 public void login(String_user, String_password){
1700452255
1700452256 //根据用户名获得用户对象
1700452257
1700452258 User u=userDao.getUserByUser(_user);
1700452259
1700452260 return u!=null&&u.getPasswd().equals(_password);
1700452261
1700452262 }
1700452263
1700452264 }
1700452265
1700452266 追踪到这里,发现从数据中取出用户对象的效率很低,但是数据库的CPU、内存、I/O都没有问题,而且没有到达最大连接数。继续追踪下去,终于发现问题了:数据库的版本和JDBC的版本不一致,虽然在进行所有的连接、执行SQL、断开等操作时都没有出现任何问题,但在多表的联合查询中速度非常慢。问题定位了,将其替换成数据库匹配的驱动程序,登录问题马上得到解决,并且其他所有性能慢的问题都解决了,归根结底其实都是数据库驱动问题引起的。
1700452267
1700452268 解决性能问题时,不要把所有的问题都摆在眼前,这只会“扰乱”你的思维,集中精力,找到那个“出头鸟”,解决它,在大部分情况下,一批性能问题都会迎刃而解,而且我们的用户关注最多的可能就是系统20%的功能,可能我们解决了这一部分,已经达到了用户的预期目标,也就标志着我们的优化工作可以结束了。
1700452269
1700452270 注意 解决性能优化要“单线程”小步前进,避免关注点过多而导致精力分散。
1700452271
1700452272
1700452273
1700452274
1700452275 编写高质量代码:改善Java程序的151个建议 [:1700438213]
1700452276 编写高质量代码:改善Java程序的151个建议 建议137:调整JVM参数以提升性能
1700452277
1700452278 我们写的每一段Java程序都要在JVM中运行,如果程序已经优化到了极致,但还是觉得性能比较低,那JVM的优化就要提到日程上来了。不过,由于JVM又是系统运行的容器,所以稳定性也是必须考虑的,过度的优化可能就会导致系统故障频繁发生,致使系统质量大幅下降。下面提供了四个常用的JVM优化手段,供你在需要时参考。
1700452279
1700452280 (1)调整堆内存大小
1700452281
1700452282 我们知道,在JVM中有两种内存:栈内存(Stack)和堆内存(Heap),栈内存的特点是空间比较小,速度快,用来存放对象的引用及程序中的基本类型;而堆内存的特点是空间比较大,速度慢,一般对象都会在这里生成、使用和消亡。
1700452283
1700452284 栈空间是由线程开辟,线程结束,栈空间由JVM回收,因此它的大小一般不会对性能有太大的影响,但是它会影响系统的稳定性,在超过栈内存的容量时,系统会报StackOverflowError错误。可以通过“java-Xss<size>”设置栈内存大小来解决此类问题。
1700452285
1700452286 堆内存的调整不能太随意,调整得太小,会导致Full GC频繁执行,轻则导致系统性能急速下降,重则导致系统根本无法使用;调整得太大,一则是浪费资源(当然,若设置了最小堆内存则可以避免此问题),二则是产生系统不稳定的情况,例如在32位的机器上设置超过1.8GB的内存就有可能产生莫名其妙的错误。设置初始化堆内存为1GB(也就是最小堆内存),最大堆内存为1.5GB可以用如下的参数:
[ 上一页 ]  [ :1.700452237e+09 ]  [ 下一页 ]