首页 > 代码库 > 解决因为使用了官方xbean-2.4.0.jar 的库造成的性能问题
解决因为使用了官方xbean-2.4.0.jar 的库造成的性能问题
最近我们游戏经常收到玩家投诉卡进度条的问题。而且后台显示执行队列和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 的库造成的性能问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。