300 likes | 599 Views
《 J2ME 程序开发设计(下) 》 专业教程 理论讲解部分 Ver 3.1. 课程概述. 重点. J2ME 程序性能检测方法 常用的 J2ME 优化措施. 常用的 J2ME 优化措施. 学习目标. 掌握常用的 J2ME 优化技术. 难点. 高级优化措施. 1 优化概述. 1.1 为什么要优化. J2ME 游戏所处的硬件环境有如下特点 : 1 、受限的输入能力 2 、较小的屏幕大小 3 、受限的存储空间 4 、较慢的 CPU 速度
E N D
《J2ME程序开发设计(下)》 专业教程 理论讲解部分 Ver 3.1
课程概述 重点 J2ME程序性能检测方法 常用的J2ME优化措施 常用的J2ME优化措施 学习目标 掌握常用的J2ME优化技术 难点 高级优化措施
1 优化概述 1.1 为什么要优化 J2ME游戏所处的硬件环境有如下特点: 1、受限的输入能力 2、较小的屏幕大小 3、受限的存储空间 4、较慢的CPU速度 为了确保具有较高的刷新率的同时,还能迅速响应用户输入,这就要求游戏的代码必须足够快,这一点在开发j2me游戏时尤其突出.
1 优化概述 1.2 什么时候需要优化 优化是一个逐渐的过程,无论是在代码上还是在开发进度上. 首先应该关注的是游戏的功能,让游戏能够以可以接受的性能运行起来,应该把优化工作留在项目的最后期来完成。
1 优化概述 1.3 不要盲目优化 在优化代码的时候,要记住一条原则:不要优化那些你自以为需要优化的代码,而是要优化那些你知道需要优化的代码。 在调优之前,我们需要花点时间,找出真正需要优化的地方。 8020原则: 系统80%的时间和资源花在20%的代码上。
2 性能检测方法 2.1 方法检测 为了找出我们哪些方法执行次数最多,占用CPU时间最多,我们需要一个方法检测的工具。SUN已经把这个工具内置到WTK中了。
2 性能检测方法 2.1 方法检测 运行WTK 22 KToolbar
2 性能检测方法 2.1 方法检测 选择[Edit][preference][monitor],选择[Enable Profiling]
2 性能检测方法 2.1 方法检测 在Eclipse里面用缺省模拟器运行游戏的时候,WTK会在后台监控你的游戏运行情况,当关闭模拟器的时候,会看到一个弹出窗口。
2 性能检测方法 2.1 方法检测 左边窗口是运行的线程。每个线程的run方法里面又调用了一些别的方法,可以清晰地看到我们的游戏主线程,它里面又调用4个方法,分别是Thread.sleep(),input(),render()和tick()。
2 性能检测方法 2.1 方法检测 这棵树中每一个节点上的百分数指的就是执行这个方法与其子方法所花的时间占游戏运行总时间的百分比.
2 性能检测方法 2.1 方法检测 在右边窗口,显示的是对应于左边树上的当前选择的方法所调用具体的子方法列表,对应于上图的右边窗口是:例如在左边窗口选择render方法,那么右边窗口出现的内容是
2 性能检测方法 2.2 内存检测 在J2ME运行环境中,内存是非常宝贵的资源,也是影响游戏性能的重要因素。因此有必要监控内存,找出消耗内存最严重的地方。 WTK也提供了这个工具 。
2 性能检测方法 2.2 内存检测 打开WTK的preference对话框,这次选中[Enable Memory Monitor]
2 性能检测方法 2.2 内存检测 保存好设置后,在eclipse中启动游戏,伴随模拟器的是一个内存监视器如下:
2 性能检测方法 2.2 内存检测 Graph标签显示的是内存消耗折线图,Objects标签显示了内存中的对象数目:
2 性能检测方法 2.3 垃圾收集检测 java的垃圾回收器会开启一个后台线程,监视堆内存中的所有对象,当一个对象没有任何引用指向的时候,该对象被垃圾回收器回收。因此,当堆内存中的对象越多,垃圾回收器所要做的检测就越多,导致程序性能低下。因此要尽可能少的生成对象。 可以通过WTK的垃圾收集监视器,监视游戏运行过程中的垃圾收集情况。
2 性能检测方法 2.3 垃圾收集检测 设置方法如下图:
2 性能检测方法 2.3 垃圾收集检测 在控制台,我们得到以下信息,可找出代码中制造垃圾最多的地方:
3 优化方式 3.1 高级方式 在优化方式上,我们可以分成2种,一种就是高级优化,一种是低级优化。 所谓高级优化,指的就是算法和游戏逻辑级别的优化。
3 优化方式 3.1 高级方式 不要过于模拟真实 手机游戏,所要时刻关注的是什么东西是好玩的,所有的一切都要为可玩性服务。
3 优化方式 3.1 高级方式 除非必要,否则不产生对象 对象的创建和销毁都影响游戏性能。因此我们要尽可能的少创建对象。比如我们可以采用对象池等技术,来达到重用对象的目的。 对于做字符串“+”运算的地方,更要注意,因为每作一次“+”就需要产生一个新对象。
3 优化方式 3.1 高级方式 屏幕绘制 游戏的性能瓶颈往往在图片的绘制上。因此在刷屏时,不要动不动就repaint(),而是只要预先检测屏幕那些地方“变脏了”,局部刷新这些区域就行了。另外一个比较常用的小技巧就是通过扩大绘制图片的尺寸来减少绘制图片的个数。 选择更好的算法 最高级别的优化就是算法和游戏逻辑的优化了。
3 优化方式 3.2 低级方式 低级优化主要指的是代码级别的优化,常用的优化技巧有: 1)避免重复计算 对于涉及到运算的地方,比如说计算Canvas的高度和宽度,计算某些常量的数学运算值,应该只运算一次(往往就是在初始化的时候),把计算结果保存起来 。
3 优化方式 3.2 低级方式 低级优化主要指的是代码级别的优化,常用的优化技巧有: 2)数组 相对于Vector来说,无论是在访问速度占用内存空间上,数组都要快很多,因此,能使用数组的地方,我们就尽量使用数组。 其次,能使用一维数组的地方,我们就尽量使用一维数组。 对于只有小数的固定数目的对象,定义好几个固定变量的速度会更快。
3 优化方式 3.2 低级方式 低级优化主要指的是代码级别的优化,常用的优化技巧有: 3)使用快速方法 Java语法中规定,JVM在调用final,static,private修饰的方法的时候,不会进行动态绑定。因此很明显,这些方法的开销相对来说要小一些。 4)关闭调试 代码中有较多的System.out.println(),在发布之前,把他们去掉。
3 优化方式 3.2 低级方式 • 其它方法: • 避免异常处理 • 避免使用synchronized关键字 • 减少方法声明中的参数的大小和数量 • 尽量使用switch语句而不是if else语句 • 尽量使用StringBuffer而不是字符串连接 • 避免内部类的使用 • 把不用的对象引用尽早赋值为null • 对于实例变量,不要手工初始化成null或者0 • 避免强制类型转换.
小结: • 优化概述 • 性能检测方法 • 优化方式
小测验(简答题): 1、简述游戏的高级优化 2、简述游戏的低级优化 3、简述游戏性能检测方法
课后作业: 优化你的游戏项目。