码迷,mamicode.com
首页 > 编程语言 > 详细

解决因为使用了官方xbean-2.4.0.jar 的库造成的性能问题

时间:2014-11-14 17:19:52      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   使用   sp   java   

最近我们游戏经常收到玩家投诉卡进度条的问题。而且后台显示执行队列和CPU使用率异常高

根据调用的JDB分析出 使用xbean 时候会调用以下代码

在设置xmlobject 时候会有一个 GlobalLock.acquire();

当多线程并发设置xmlobject 时候造成互相等待这个GlobalLock 造成各个线程卡住,队列执行效率不高

所以我们目前解决方法就是直接用string 拼接成XML 暂时不用xbean 的功能

public final XmlObject set(XmlObject src)
  {
    if (isImmutable()) {
      throw new IllegalStateException("Cannot set the value of an immutable XmlObject");
    }
    XmlObjectBase obj = underlying(src);

    TypeStoreUser newObj = this;

    if (obj == null)
    {
      setNil();
      return this;
    }

    if (obj.isImmutable()) {
      set(obj.stringValue());
    }
    else {
      boolean noSyncThis = preCheck();
      boolean noSyncObj = obj.preCheck();

      if (monitor() == obj.monitor())
      {
        if (noSyncThis) {
          newObj = setterHelper(obj);
        }
        else {
          synchronized (monitor()) {
            newObj = setterHelper(obj);
          }

        }

      }
      else if (noSyncThis)
      {
        if (noSyncObj)
        {
          newObj = setterHelper(obj);
        }
        else
        {
          synchronized (obj.monitor()) {
            newObj = setterHelper(obj);
          }
        }
      }
      else
      {
        if (noSyncObj)
        {
          synchronized (monitor()) {
            newObj = setterHelper(obj);
          }

        }

        boolean acquired = false;
        try
        {
          GlobalLock.acquire();
          acquired = true;

          synchronized (monitor())
          {
            synchronized (obj.monitor())
            {
              GlobalLock.release();
              acquired = false;

              newObj = setterHelper(obj);
            }
          }
        }
        catch (InterruptedException e)
        {
          throw new XmlRuntimeException(e);
        }
        finally
        {
          if (acquired) {
            GlobalLock.release();
          }
        }
      }

    }

    return (XmlObject)newObj;
  }

  

解决因为使用了官方xbean-2.4.0.jar 的库造成的性能问题

标签:style   blog   io   color   ar   os   使用   sp   java   

原文地址:http://www.cnblogs.com/maikkk/p/4097583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!