`

手机内存优化文章

    博客分类:
  • j2me
阅读更多

转载http://www.cnjm.net/tech/article4693.html

本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>

来自:http://www.cnjm.net/tech/article4693.html


今天在CSDN上浏览帖子,忽然发现一篇询问内存溢出的解决办法的帖子,有感而发写了这篇文。
      我想做过J2ME的人,特别是像我这样做手机游戏的,肯定会对OutOfMemoryError这个异常深恶痛绝,尤其是在老40这样变态的机型上,甚至 对这个异常都产生了恐惧。还好我现在总算不做这个机型了,对那些仍然在为这个机型移植游戏的同志们感到同情。为了能够稍微缓解一下他们的痛苦,也为了广大 J2ME的从业者和爱好者能尽量减少与该异常的见面次数,CoCoMo将把自己的经验分享一下。
     
  首先了解一下分析内存占用的方法,一般有两种:模拟器自带工具和Runtime类方法。

JAVA手机网[www.cnjm.net]

 
  模拟器自带工具:WTK貌似带了一个Memory Monitor,而且许多学者人士也夸夸其谈他的使用方法,但我不知道有多少人真正在用。就我对他的了解,首先运行他你的程序会慢的一塌糊涂,这对游戏开 发者来说简直是无法忍受的。但我出于研究目的仍然让他跑了半个小时才发现原来他根本无法显示正确的内存占用量,我载入一张很大的图片后他的内存线好像只出 现了微微的波动又停留在原位,呵,看来的确是拿出来秀的。我一般使用的是7210模拟器自带的内存监视器,模拟的很准,但唯一的缺点是内存太少,才 200K。我也见某些人使用3220的模拟器监视内存,好像内存稍微大一点,我还没来得及尝试就再也不用为老40写程序了,庆幸。

JAVA手机网[www.cnjm.net]

  Runtime类方法:我经常用这个语句System.out.println(Runtime.getRuntime().freeMemory());后来集成进了我的引擎,他能够显示当前剩余内存。不记得有多少次我用它在老40上来寻找内存占用峰值。
     
      了解了分析内存的方法,来看看内存占用的罪魁祸首:程序和资源。
      程序:类会被编译成class字节码文件随MIDlet的启动加载进内存,而且是一次性全部加入。也就是说MIDlet里类个数越多、单个类程序越长、类 内字符串常量及数据越多,编译后的class文件就越大,载入后占用的内存也越多。我经常在MIDlet类的构造函数里用Runtime方法来查看 MIDlet启动后整个程序占用内存量。
      优化方法:
      1.某些同志将MIDlet程序写成两个类来减少内存占用量,但是以牺牲Java的OOP特性为代价的。在程序比较大时这种弊端将尤为显见。而且 CoCoMo曾经遇到过单个类过大,载入时间过长而违反百宝箱有关Logo 6秒时间限制的情形。因而我现在的程序加带引擎一般都是6-7个类。
      2.尽量编写优雅的代码,减少函数数量,在程序发布时去掉try catch,最大限度的减少程序行数,这一般都是在老40上没有办法的办法,现在CoCoMo已经不靠这个来省内存了。
      3.将数据及字符串写进文件,在用时方载入内存,不用时设为null。
      4.I/O操作getClass().getResourceAsStream(file);、数据库操做 RecordStore.openRecordStore(name, true);、声音创建Manager.createPlayer();、图像创建Image.createImage(file);会在短时间内占用大 量内存且过后释放,如果MIDlet程序内存剩余量不足则会在这些函数频繁调用时发生内存溢出,产生所谓的内存峰值,尤其在老40上比较普遍。

JAVA手机网[www.cnjm.net]

当你再次与讨厌的OutOfMemoryError碰面时,多用Runtime查找内存峰值发生位置并尽量将这些语句分开调用,并灵活运用System.gc()来及时回收。

JAVA手机网[www.cnjm.net]

     资源:
        图片:是占用内存的大户,尤其是手机游戏图片资源众多。对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中的占用量:
      内存占用量=宽*高*像素字节数,其中像素字节数因机型而异。
      例如一张64*64的图片在7210上的内存占用量=64*64*1.5=6144(字节)=6K、在S60上的内存占用 量=64*64*2=8192(字节)=8K。像素字节数因机型而异,例如7210是4096色机型,也就是说用12位来表示一个像素,所以乘上1.5, 而S60是65536色的机型,用16位来表示一个像素,所以乘上2。
      优化方法:
      有些人认为压缩图片可以节省内存,这种想法是错误的。根据上面的解释图片载入内存后只和宽高有关系,和图片数据量大小没有任何关系,压缩图片只能减少jar大小而不能减少内存占用量。
      1.静态法:减小图片大小,宽高小了结果当然小了。根据这个思路出现了动画编辑器之类的工具,像gameloft的波斯王子,人物被分割后使人体的部位可以重用,各部位紧凑放置都是为了较少图片大小,充分利用图片中的每一寸空间。
      2.动态法:减少同一时刻载入内存的图片数。CoCoMo曾经在火影武士项目中遇到过这种情况,当时有6种怪物,如果同时载入内存在老40上肯定爆掉了, 但是每关只出现两到三种怪物,所以每一关只需要载入该关出现的怪物图片即可。现在想起来当时做这个项目在老40上溢出频出,真把我搞死了。
      声音:声音也是比较耗用内存的资源,声音中音轨所占的byte会转化成字节流被载入到内存中。因而减少音轨所占byte即可减少内存耗用量。目前 gameloft的做法是用声音转化工具将mid转化为ott,然后变为ByteArrayInputStream字节流来创建Player

 

 

 

 

一.代码优化

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

  //a不为空

  a=newLogic();

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

  较好的写法如下:

  a=null;

  a=newLogic();

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

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

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

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

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

  if(img==null){

  //初始化

  }

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

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

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

 

 

二.图片优化

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

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

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

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

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

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

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

 

 

三.工具优化

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

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

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

  .使用Profiler去查找哪里需要优化!
 
  .记住Profiler不代表真机上的优化结果,使用System Timer来在真机上做最后的测试!

  .在做低级优化之前,总是要先思考算法是否是最优!

J

  .尽可能的使用SetClip()来减少绘图区域,相对于SetClip(),drawImage()所花的时间会更可观!

  .尽最大可能的进行对需要的数据进行预先计算并将结果保存在缓冲里!

  .String类很容易产生垃圾内存,尽可能的使用StringBuffer代替String或用final static来定义之!!

J

  .尽可能的使用<<和>>来代替*和/!

  .使用位操作来代替%运算!

  .与0比较比与其他数值比较快!

  .局部变量比其他类型的变量运算要快!
  
  .尽量使用已有算法!

 

 

3.让多个对象使用同样的监听器,比如让主MIDlet类实现CommandListener和ItemStateListener接口。

4.把所有资源文件做成一个数据文件。

5.class中生成尽可能少的方法。速度比较:同步方法<接口方法<实例方法<final方法<静态方法

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    电动汽车充电站选址定容优化:基于MATLAB建模求解与成本最小化策略,电动汽车充电站选址定容优化:基于MATLAB的最优规划模型及初学者指南,电动汽车充电站的最优选址定容MATLAB程序 以规划期内充

    电动汽车充电站选址定容优化:基于MATLAB建模求解与成本最小化策略,电动汽车充电站选址定容优化:基于MATLAB的最优规划模型及初学者指南,电动汽车充电站的最优选址定容MATLAB程序 以规划期内充电站的总成本 (包括投资、运行和维护成本)和网损费用之和最小为目标,考虑了相关的约束条件,构造了电动汽车充电站最优规划的数学模型。 从34个位置中,选取7个充电站地址,进行选址优化 关键词:电动汽车;充电站;选址和定容 程序注释清晰,适合初学者学习 ,电动汽车; 充电站选址定容; MATLAB程序; 规划模型; 成本优化; 网损费用; 初学者学习; 程序注释清晰,基于MATLAB的电动汽车充电站选址定容优化程序:成本最小化与约束条件下的选址策略

    基于源荷双重不确定性的虚拟电厂日前鲁棒经济调度优化模型基于MATLAB+CPLEX仿真平台求解,基于源荷双重不确定性的虚拟电厂日前鲁棒优化经济调度策略,MATLAB代码:计及源-荷双重不确定性的电厂日

    基于源荷双重不确定性的虚拟电厂日前鲁棒经济调度优化模型基于MATLAB+CPLEX仿真平台求解,基于源荷双重不确定性的虚拟电厂日前鲁棒优化经济调度策略,MATLAB代码:计及源-荷双重不确定性的电厂日前鲁棒优化调度 关键词:电厂 微网调度 鲁棒调度 源荷不确定性 日前经济调度 参考文档:《含电动汽车和风电机组的发电厂竞价策略_杨甲甲》参考其鲁棒模型的化简求解部分,即附录中的鲁棒问题化简求解的全过程; 《Virtual power plant mid-term dispatch optimization》参考燃气轮机、储能部分模型 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一个电厂或者微网单元的日前鲁棒经济调度的模型,考虑了光伏出力和负荷功率的双重不确定性,采用鲁棒优化法处理不确定性变量,构建了电厂鲁棒优化调度模型。 具体来看,不确定性考虑的是目标函数以及约束条件中均含有不确定变量,设置鲁棒系数可以调节多重不确定结果,化简的过程也很清晰,程序实现效果良好,一行一注释。 ,关键词:虚拟电厂; 鲁棒优化调度; 源荷不确定性; 日前经济调度; 微网调度; 光伏出力

    基于遗传算法的储能优化配置研究:成本模型分析与最优运行计划求解(含风光机组),基于遗传算法的储能优化配置:成本模型分析与最优运行计划求解(含风光机组),MATLAB代码:基于遗传算法的储能优化配置(可

    基于遗传算法的储能优化配置研究:成本模型分析与最优运行计划求解(含风光机组),基于遗传算法的储能优化配置:成本模型分析与最优运行计划求解(含风光机组),MATLAB代码:基于遗传算法的储能优化配置(可加入风光机组) 关键词:储能优化配置 遗传算法 储能充放电优化 参考文档:无明显参考文档,仅有几篇文献可以适当参考 仿真平台:MATLAB 平台采用遗传算法实现求解 优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:建立了储能的成本模型,包含运行维护成本以及容量配置成本,然后以该成本函数最小为目标函数,经过遗传算法求解出其最优运行计划,并通过其运行计划最终确定储能容量配置的大小,求解采用的是遗传算法,求解效果极佳,具体可以看图 ,关键词:MATLAB代码;遗传算法;储能优化配置;储能充放电优化;成本模型;运行维护成本;容量配置成本;最优运行计划;求解效果。,基于遗传算法的储能优化配置MATLAB代码:精细优化与成本最小化研究

    设计模式- 观察者模式 Observer Pattern详解

    如本文所描述,设计模式经典实现、三种其他实现方式以及六个方向的问题优化的详细代码

    高性能DSP28335驱动的移相全桥同步整流技术:高效电源输出与轻量级结构设计,基于DSP28335的高效同步整流电源系统:移相全桥驱动,低损耗输出近94%效率,铝基板+平面变压器设计挑战与低成本方案

    高性能DSP28335驱动的移相全桥同步整流技术:高效电源输出与轻量级结构设计,基于DSP28335的高效同步整流电源系统:移相全桥驱动,低损耗输出近94%效率,铝基板+平面变压器设计挑战与低成本方案探索,自研DSP28335+移相全桥+纯程序实现同步整流。 目前在DSP固有损耗2W的情况下,输出120W效率接近94%。 就是铝基板+平面变压器玩起来太贵,不好做小批量,335现在也很贵。 基于035的低成本版本近期开始设计~~~ 数字电源demo,输入18-32V,输出12V15A,伍尔特电感+平面变压器+板上平面变压器辅助电源,隔离半桥驱动+隔离采样,用于技术交流和样机平台搭建。 采用上下叠板架构,上板为4层DSP控制板,下板为单层功率铝基板,散热极佳。 ,自研DSP28335; 移相全桥; 纯程序同步整流; 效率接近94%; 低成本版本设计; 数字电源demo; 上下叠板架构; DSP控制板; 散热。,自研DSP28335控制下的同步整流技术优化:效率接近94%的电源解决方案

    PPT模板 -星际郎中:守护星际生命.pptx

    PPT模板 -星际郎中:守护星际生命.pptx

    19考试真题最近的t41.txt

    19考试真题最近的t41.txt

    Xilinx ug476-7Series-Transceivers

    Xilinx公司推出的7系列FPGA中的GTX/GTH收发器是用于高速串行通信的收发器模块,能够实现数据的高速串行传输。本资料为Xilinx提供的用户手册ug476_7Series_Transceivers

    GearTrain 提供了灵活的推理框架, 支持视频、图片推理方式 基于 GearTrain 用户可像齿轮一样自由组合各种Pipeline,实现各种推理任务

    GearTrain 提供了灵活的推理框架, 支持视频、图片推理方式。基于 GearTrain 用户可像齿轮一样自由组合各种Pipeline,实现各种推理任务

    一个测试的网页布局,作为备份

    一个测试的网页布局,作为备份

    基于SSM+redis的awd对抗系统 .zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    内蒙古自治区公共数据资源登记管理暂行办法.docx

    内蒙古自治区公共数据资源登记管理暂行办法.docx

    MATLAB下基于遗传算法的有序充放电优化策略:实现电动汽车充电费用最低与负荷峰谷平衡,基于遗传算法的电动汽车有序充放电优化策略:精英自适应混合算法实现负荷均衡与费用最小化,MATLAB代码:基于遗传

    MATLAB下基于遗传算法的有序充放电优化策略:实现电动汽车充电费用最低与负荷峰谷平衡,基于遗传算法的电动汽车有序充放电优化策略:精英自适应混合算法实现负荷均衡与费用最小化,MATLAB代码:基于遗传算法的电动汽车有序充放电优化 关键词:遗传算法 电动汽车 有序充电 优化调度 参考文档:《精英自适应混合遗传算法及其实现_江建》算法部分;电动汽车建模部分相关文档太多,自行搜索参考即可; 仿真平台:MATLAB 主要内容:代码主要做的是利用遗传算法对电动汽车有序充电进行优化;优化目标包括充电费用最低,充电时间达到要求(电动汽车充到足够的电)考虑电动汽车充电对电网负荷的影响,使负荷峰谷差最小。 分别利用传统、精英和变异遗传算法进行对比算法优劣,比较迭代结果,优化变量为起始充电时刻 ,关键词:MATLAB代码; 遗传算法; 电动汽车; 有序充电; 优化调度; 充电费用; 充电时间; 电网负荷; 精英自适应混合遗传算法; 迭代结果; 优化变量。,基于遗传算法的电动汽车有序充放电优化调度策略研究

    基于OpenCV的车牌识别系统的设计与实现.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款

    STM32开发:IIR带阻滤波器设计与实现,含巴特沃斯和切比雪夫滤波器MATLAB程序,STM32开发中IIR带阻滤波器的实现与巴特沃斯滤波器设计详解:附MATLAB程序,STM32开发 IIR带阻滤

    STM32开发:IIR带阻滤波器设计与实现,含巴特沃斯和切比雪夫滤波器MATLAB程序,STM32开发中IIR带阻滤波器的实现与巴特沃斯滤波器设计详解:附MATLAB程序,STM32开发 IIR带阻滤波器 STM32实现IIR无限冲击响应带阻滤波器设计,巴特沃斯滤波器,代码工整,自编代码,注释详细,赠送巴特沃斯和切比雪夫IIR带阻滤波器MATLAB程序 ,STM32开发; IIR带阻滤波器; 无限冲击响应; 巴特沃斯滤波器; 自编代码; 注释详细; MATLAB程序,STM32中IIR带阻滤波器设计与实现

    电商系统(包含手机端,前端,后端).zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    机器学习【KMeans聚类分析实战】用户分群聚类详解-SSE、CH 指数、SC全解析,实战电信客户分群案例

    包含输入输出,可视化案例。聚类算法

    基于PLC的地铁排水控制系统设计:梯形图程序、接线图与IO分配组态全解析,基于PLC的地铁排水控制系统设计:梯形图程序、接线图与IO分配组态全解析,No.505 基于PLC的地铁排水控制系统设计电气控

    基于PLC的地铁排水控制系统设计:梯形图程序、接线图与IO分配组态全解析,基于PLC的地铁排水控制系统设计:梯形图程序、接线图与IO分配组态全解析,No.505 基于PLC的地铁排水控制系统设计电气控制程序 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面 ,505; PLC地铁排水控制; 电气控制程序; 梯形图程序; 接线图原理图; IO分配; 组态画面,PLC驱动的地铁排水系统设计:电气控制程序详解及图解

    元器件基础知识文档(适合初学者学习)

    报告电子元器件手册目录,常见电子元器件的参考资料以及70种电子元器件封装等等,非常适合初学者进行学习和掌握。希望大家都能够在电子领域进行深耕。

Global site tag (gtag.js) - Google Analytics