论坛调整完毕,全面开放注册,无需认证。

L2J开发几点经验

为玩家提供游戏编译制作相关参考资料
回复
头像
hagcse
Mr.GL
Mr.GL
帖子: 151
注册时间: 2018-02-25 15:50

L2J开发几点经验

帖子 hagcse » 2018-03-10 16:09

以下内容只适合自己有能力独立开发版本的朋友看
废话就不多说了直接总结~

1,不要用过大的数字来定义你的物品ID
有些朋友喜欢给物品上来就弄个巨大的ID 比如数字100001,之类的,这种方式是非常不推荐的,
L2J在服务端启动的时候会对物品表创建一个高速缓存,这个缓存是利用Object[]来实现的,而Object[]的长度则由你物品中ID最大的那个数值决定,也就是说如果你有2000个道具,但是你最大的ID为100001,那么它一下就会开辟100001个空间用来存放,虽然不存在物品的地方存为null,但是也是一种浪费
2,慎用String+=String 这种格式来拼接字符串
String 由于太常用了,Sun公司在开发的Java的时候对String做了一些优化,在String中有一个数组用来保存那些曾用到过的String 也就是我们常听到的Stirng常量池,这样做的好处是如果发现要创建的String对象已经存在,则不必重新创建只要从池中拿出来用就好,缺点是,如果你程序写的不好。常量池会越来越大,最后物极必反反而会严重影响你服务器的性能,因为垃圾回收不回收常量池,所以String很有可能会造成内存溢出。
对于一个经常可变的字符串,建议用StirngBuilder来进行拼接,这里L2J默认给我们提供了一个比较好用的API,在StringUtil类中有快速拼接的方法。
3,少用Fast 集合
不要定义一个什么集合都Fast..他一点也不Fast,而且吃掉你超多的内存,Fast类型的集合在创建和销毁的时候都慢一拍
但是Fast是一种比较“万能”的集合,如果你搞不清什么时候用什么集合就用他吧,如果你能明确自己的用途最好不要用它
4,能用基本类型的不要用引用类型
这个不多说了,对象虽然好用,但是开销大...
5,避免自动拆箱装箱操作。
同样如果你是要对基本类型的数据进行集合操作,建议使用Trove包下的API,可以有效的避免JDK自动拆装箱问题
外国学者报告说性能可以提升1个数量级。
6,减小不必要的开销设计。
你有必要一个点放N多怪吗,你有必要一个怪连致命药草都要掉吗,人多了你会卡 怪多你一样卡,地面物件多了你会卡的半死~一堆烂怪和一个强度较高的怪能达到的游戏效果(给予玩家的掉落,经验)都是差不多的,但是对服务器的开销是天差地别的。

完毕~先总结这么多
图片

回复