`
tomcat_oracle
  • 浏览: 311711 次
社区版块
存档分类
最新评论

JAVA内存优化编程的三个方法

阅读更多

一.代码优化

  内存会溢出肯定和代码逃不了关系,99.99%学java的人都知道垃圾回收器是 java的一大优点并据此来嘲笑C++.显然这个特性为代码编写者省了不少事,但这个特性却带来了不少隐患.举个例子在游当中经常有不同场景的切换,如从游戏逻辑退到主菜单逻辑,对游戏逻辑对象的态度很多人会选择忘记等待垃圾回收器来收尸.乍看之下似乎并无不妥垃圾回收器会来善后.实际上垃圾回收器并非实时的,它不像C++的Delete语句马上释放不用的内存.当从游戏逻辑切换到主菜单逻辑这时两个对象同时存在很可能这时内存就不够用了.读到这里很多人会发现实际上垃圾回收器在j2me上并不怎么好用,从一个角度上来讲在j2me上所有垃圾必须由手工释放,除简单类型以外所有对象都必须显式地置空例如 imgs=null; 实际上java提供了一个不错的工具用来查找内存溢出,java.lang.Runtime.freeMemory() .它可以返回当前的剩余内存数,将它适当的安放在代码中可以有效的监测内存使用状况.很大一部份的j2me程序员之前都是从事pc软件开发工作,充裕的内存掩盖了许多写代码的不良习惯.如下所示:

  //a 不为空

  a=new Logic();

  很多人可能对此有异议,他们会认为新的对象会把旧的对象冲掉并且释放内存.这里面包含两个问题:1. 该段代码是先创建对象然后再进行赋值操作的,也就是说在这期间有两个对象同时存在这就很可能会产生溢出.2. 这样做也会妨碍垃圾回收器的工作

  较好的写法如下:

  a=null;

  a=new Logic();

  虽然麻烦了点但在j2me中还是必要的.接着看下例.

  drawString(“游戏时间:” + time ,50,50,Graphics.LEFT|Graphics.TOP);

  “游戏时间:” + time 很完美在paint()方法当中每次都被刷一遍显示在屏幕上.危机往往隐藏在美丽的外表,该语句会引起新的内存重新分配来存储 “游戏时间:” + time 而显示完以后又必须由垃圾回收器释放,用了双倍时间,并且容易发生内存溢出.依此类推在重复执行的方法里应尽量避免重复定义对象.与paint()方法类似在循环里也有类似的情况存在.

  把所有对象的初始化放在构造函数里想必是再正当不过了,大多数人通常的做法是把当前逻辑所要用到的资源通通初始化完毕.

  很大一部份的内存溢出都是发生在构造函数中.内存使用的高峰期都是在构造函数中所以避开这个高峰能有效的防止溢出.建议最好的办法是第一次使用时初始化.如下所示:

  if (img==null){

  //初始化

  }

  现在做游戏很多时候都需要地图数组,声音数组,还有一些其它资源这些资源很多可以放在代码中也有的可以放在文件当中.

  强烈建议将这些资源放在文件中需要时在load进来.这些资源文件如果放在代码中则会占用不小的代码段空间,而代码一般是程序一运行就装载到内存当中.

  除上面列举的方法外还有一些大家所熟知的顺便一提, 比如关闭没用的rms ,关闭没用的网络连接,关闭没用的流.正确地停止线程.良好的程序架构减少代码偶合性也是一个不错的方法,无论在代码调式,内存释放都可以做到非常清析.

  二.图片优化

  j2me的内存杀手无疑非图片莫属,一张3k的图片可以占用20多k的内存不信大家把load前后的内存剩余打印出来对比看看.所以防止内存溢出最直接的办法就是从图片入手.

  图片压缩: 多数人马上会想到这个办法.不错这个办法是最有效的.在photoshop里图片制作完成后不要选择 “存储为”,而是选择 “存储为 web 所用格式” 可以根据里面的选项进行压缩,特别是颜色这一项越小越好不过相应的图像会有所失真.不要认为这样就完了.

  实际上该图片还可以再次压缩,在网上有许多类似的工具.推荐一款可以压缩png格式的软件 xat.com Image Optimizer 效果不错.经常都有 70% 的压缩率且图像不会失真.

  假如你有多张规格一样的图片,那么建议你把它做成一张长条图片.有两个原因:

  1、这样节省存储空间和内存空间.大家可做个试验将10张图片的内容放在一张当中对比看看文件大小有没有变化.

  2 、10张图片需要10个image 对象需要进行10次io操作浪费时间不说还浪费内存.当笔者发现这个好处时兴奋地把所有图片都存成一张,吱地一声内存又溢出了...原因想必大家也知道!!图片太大了不要把不同界面的图片整合在一起否则经常会得不偿失.

  作图时还有一些细节需要注意,颜色数量,分辩率,图像模式(最好是索引颜色),画布大小都会影响到图片大小.

  三.工具优化

  谁都知道混淆器是用来保护代码的以加大反编译的难度(个人认为这是在嘲笑程序员的智商).实际上用它来优化程序也是不错的选择,至少有两点好处:

  1、压缩程序大小.一个60k的程序经常可以压掉10k左右.10k的空间对于写低端手机的程序员简直是雪中送碳,多少超过64k限制的游戏都受过它的恩惠;

  2、节省内存空间.用脚去想也想得出来代码少了内存里的代码段自然就短了.

9
4
分享到:
评论

相关推荐

    node-v10.22.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于JAVA的物流管理系统的源码设计与实现.zip

    毕业设计物流管理系统的设计与实现(Java版本) 采用Struts2+hibernate+Oracle10g+Tomcat 涉及车辆管理,配送点管理,运输方式管理,订单管理,员工管理,用户管理,部门管理,权限管理,角色管理等基础管理功能。

    基于VB+access实现的成绩分析统计系统(论文+源代码).zip

    基于VB+access实现的成绩分析统计系统(论文+源代码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    node-v10.14.2-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ASP+ACCESS网上购物系统设计(源代码+设计说明书+调研报告).zip

    ASP+ACCESS网上购物系统设计(源代码+设计说明书+调研报告).zip

    AO工艺设计计算(全).xls

    污水处理计算书

    node-v7.3.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ASP+ACCESS在线考试系统设计(源代码+设计说明书).zip

    ASP+ACCESS在线考试系统设计(源代码+设计说明书).zip

    node-v11.10.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip

    毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip 毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip 毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip毕业设计基于知识图谱和循环神经网络的推荐系统python源码+数据集.zip

    2024年老人机行业分析报告.pptx

    行业报告

    基于matlab实现的导线网平差,主要是附和导线平差程序,用于计算各点坐标并评定其精度 .rar

    基于matlab实现的导线网平差,主要是附和导线平差程序,用于计算各点坐标并评定其精度。.rar

    基于VB+access实现的学生学籍管理系统(系统+论文).zip

    基于VB+access实现的学生学籍管理系统(系统+论文) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    ASP基于BS的工艺品展示系统的设计与实现(源代码+设计说明书).zip

    ASP基于BS的工艺品展示系统的设计与实现(源代码+设计说明书).zip

    经典SBR设计计算(全).xls

    污水处理计算书

    ASP+ACCESS网上花店毕业设计全套(设计说明书+源代码+说明).zip

    ASP+ACCESS网上花店毕业设计全套(设计说明书+源代码+说明).zip

    污水工艺设计计算书.xlsx

    污水处理计算书

    2024年速冻包子行业分析报告.pptx

    行业报告

    ASP基于WEB教学评估系统设计(源代码+设计说明书).zip

    ASP基于WEB教学评估系统设计(源代码+设计说明书).zip

    JSP教师档案管理系统(源代码+设计说明书).zip

    JSP教师档案管理系统(源代码+设计说明书).zip

Global site tag (gtag.js) - Google Analytics