Android性能优化—不建议使用枚举Enum

基于Java的高校校园点餐系统 本文介绍了一个基于Java技术开发的高校校园点餐系统,该系统以B/S结构为基础,采用MySQL作为数据库,实现了一个高效、便捷的在线点餐平台。系统主要面向三类用户:管理员、用户和食堂工作人员,提供包括用户管理、食堂管理、菜单管理、订单管理等在内的多项功能。通过系统的具体测试,验证了其可行性和有效性,为高校师生提供了一个科学化、系统化的点餐服务。高校校园点餐系统的开发和实现,不仅提高了校园餐饮服务的效率和质量,也为师生提供了一个更加便捷的点餐体验。 阅读详情

转载自:http://blog.youkuaiyun.com/lingruimingfeng/article/details/51538472


最近优化App,由于项目中使用了Lib,而Lib代码中包含了大量的枚举类型,导致App占用内存过多发火。好吧,知道问题点,那就干掉,抛弃之~偷笑

问题是解决了,为啥会这样呢?疑问 先来看看Android官网的说明吧:

看见了吧,Android官网不建议咱们使用enums,说的也很清楚了,占用内存多(Enums often require more than twice as much memory as static constants.)。

Android中当你的App启动后系统会给App单独分配一块内存。App的DEX code、Heap以及运行时的内存分配都会在这块内存中。

生气举个栗子:

1.使用Int表示状态

public static final int VALUE1 =1;
public static final int VALUE1 =2;
public static final int VALUE1 =3;

2.使用Enums表示状态

public static enum Value{
  VALUE1,
  VALUE2,
  VALUE3
}

情形2中的DEX size增加是情形1中的13倍之多。这还只是DEX code的增加,同样,运行时的内存分配,一个enum值的声明会消耗至少20 bytes,这还不算其中的对象数组需要保持对enum值的引用。Why?使用javap反编译情形二中生成的class文件,去掉汇编代码后如下:

public final class VALUE extends java.lang.Enum{  
  public static final VALUE VALUE1;  
  public static final VALUE VALUE2;  
  public static final VALUE VALUE3;
  private static final VALUE[] values[];
  static{}
}

可以看到实际上enum类型继承Java.lang.Enum,每个枚举项都会被声明成一个静态变量,并被赋值。VALUE value1 = VALUE.VALUE1则会引起对静态变量的引用。

因 此,当你的代码或包含的Lib中大量使用enums时,对于本身内存小的手机将是灾难性的。不可否认enums会使得代码更易读更安全,但是我们使用 Int也可以通过@IntDef 注解防止编译时Lint errors。当然如果你使用enums,proguard在一些情况下会优化你的代码使用Int代替。


31、MSP430FR2355时钟系统与低功耗模式解析 本文详细解析了MSP430FR2355的时钟系统和低功耗模式。首先介绍了时钟系统的组成,包括XT1振荡器、DCO、MODCLK、MCLK、SMCLK和ACLK的功能与配置方法。接着探讨了MSP430FR2355的五种低功耗模式及其配置要点,并分析了时钟系统与低功耗模式之间的协同关系。最后通过实际应用案例展示了如何在具体场景中优化系统功耗。文章旨在帮助开发者充分利用MSP430FR2355的时钟与低功耗特性,实现高性能、低功耗的嵌入式系统设计。 阅读详情

相关推荐

WinInet 编程:MFC 中的互联网编程

WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。

JAZJD的博客 1637

android 枚举性能问题

面试题:都说枚举性能不好,不好在哪里?现在有什么优化的方案如何解决的? 首先我们可能要了解一下枚举,以前看性能优化的文章,都说不要使用枚举,因为枚举占用内存大,占用apk空间大,但是一直也不知道原因。 1 09年谷歌官方视频有说,使用枚举会让apk比原来要大大约13倍的空间。 有人可能会有疑问,你咋知道是13倍呢? 大兄弟,消消气,是不是13倍,我们可以自己新建一个工程,然后打包,然后再加入枚...

北京流年 815

模型参考自适应控制(MRAC):让PID参数动态优化

本文深入解析模型参考自适应控制(MRAC)技术,它通过实时调整PID参数,使控制系统能自动适应系统特性变化和外部干扰。文章详细介绍了MRAC的工作原理、数学基础,并提供了用C语言实现的实战代码示例,帮助工程师解决传统PID控制在非线性、时变系统中参数整定繁琐的难题。

tequila的博客 903

Android性能优化

性能优化是一个大的范畴,曾问过一些学员在Android中如何做性能优化的,都不知道从哪开始说起,三三两两说出来的也很不全面。在此总结如下: 1.View的优化      1)ListView的优化 复用convertview , 历史的view对象 减少子孩子查询的次数 viewholder 异步加载数据(把图片缓存) 条目多时分页加载数据 加载时显示进度条让

MaxPanda0206的博客 766

【对比学习+分割】CRIS:CLIP驱动RIS图像分割(CVPR 2022)

CRIS: CLIP-Driven Referring Image Segmentation

这个博客太懒了什么都没说 3325

FPGA实战:从零构建eMMC控制器(Verilog篇)

本文详细介绍了如何使用Verilog从零构建FPGA上的eMMC控制器,涵盖eMMC接口基础、命令系统解析、关键模块设计及性能优化技巧。通过实战案例,帮助开发者掌握高速数据存储解决方案,提升嵌入式系统开发能力。

weixin_26802933的博客 297

为什么 Android 中不建议使用 Enums

关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java 关于Android性能优化中一个常见的建议是不要在你的代码中使用Enums,就连 Android官网 上都强烈建议不要使用。 Why Android中当你的App启动后系统会给App单独分配一块内存。App的DEX code、Heap以及运行

500

WebRTC之beamforming算法

CSND已永久停更,最新版唯一来源点击下面链接跳转: 语音增强和语音识别网页书 坐标问题 这里以笔记本为例进行说明,当笔记本按如下方式打开: 首先是键盘和液晶屏呈90度,然后鼠标上方,也就是液晶屏上方正中间是camera,把平行于键盘的面看成是xy平面,把液晶屏所在的面看成是xz平面,所有平面的原点都在Camera的位置。 方位角:从原点开始,Camera的右侧是0度,逆时针方...

shichaog的专栏 1万+

android 枚举空间,android 枚举性能问题

面试题:都说枚举性能不好,不好在哪里?现在有什么优化的方案如何解决的?首先我们可能要了解一下枚举,以前看性能优化的文章,都说不要使用枚举,因为枚举占用内存大,占用apk空间大,但是一直也不知道原因。109年谷歌官方视频有说,使用枚举会让apk比原来要大大约13倍的空间。有人可能会有疑问,你咋知道是13倍呢?大兄弟,消消气,是不是13倍,我们可以自己新建一个工程,然后打包,然后再加入枚举,然后再打包...

weixin_33489161的博客 271

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1232

基于Simulink的双向DC-DC变换器在储能系统中的应用仿真

摘要:本文详细介绍了基于Simulink的双向DC-DC变换器在光伏储能系统中的仿真实现。主要内容包括:1)采用非隔离型双向Buck-Boost拓扑作为储能系统枢纽;2)针对750V直流微网中的20kWh锂电池接口场景进行建模;3)详细阐述双闭环控制器设计(电压外环+电流内环)、工作模式判断逻辑等关键步骤;4)通过仿真验证了系统在功率阶跃和模式切换下的性能。文章提供了完整的建模流程和控制方法,为储能系统接口设计提供了实用参考。

amy_mhd的博客 178

(十五)枚举

认识枚举 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序赋给的非法值,使用普通变量的方式在开发阶段无法实现这一目标 在JDK1.5之后,使用关键字enum定义的一种新类型,称为枚举类型 Enum类与enum关键字 使用enum关键字定义的枚举类,实际上就相当于定义了一个类,此类继承了Enum类而已 Enum...

大数据进阶之路 220

【一 扣子客户案例合集】【 1.3 识典古籍基于扣子智能助手的古籍数字化全流程技术解析】

古籍数字化智能处理系统全流程解析 本文详细介绍了基于扣子智能助手的古籍数字化解决方案,核心技术包括: 多层级架构设计:采用"云-边-端"三层次架构,整合高精度扫描设备与AI处理模块,实现从物理古籍到结构化数据的全流程自动化。 智能图像处理:通过12道预处理工序(包括畸变校正、污渍去除和对比度增强)处理古籍图像,采用改进的EAST算法和ViT模型实现高精度文字检测与识别,准确率达98.7%。 NLP增强处理:结合Transformer-XL预训练模型和N-gram语言模型进行文本校正,基于

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1440

android 定义全局枚举,Android 性能优化之:避免在Android上过多使用enum

一,enum基本用法1,枚举常量和数据有关联定义:public enum TaskStatus {UN_KNOW(-1, "未知", "#84807f"),UN_START(0, "未开始", "#e2d512"),PROGRESSING(1, "进行中", "#12ea2f"),COMPLETED(2, "已完成", "#c30910");int mCode;String mDesc;Strin...

weixin_42129300的博客 418

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android中不使用枚举类(enum)替代为@IntDef @StringDef

概述 Enum 是 java 中一种包含固定常数的类型 当我们需要预先定义一些值,并限定范围时,使用 Enum,来做到编写和编译都查错 Java 的 Enum 的实质是特殊单例的静态成员变量 Enum 可以在编写器,编译器做到各种静态检查防呆 Enum 在运行期,所有枚举类作为单例,全部加载到内存中 因为上述原因,Enum 增加了APK 的内存占用,比常量多5到10倍的内存占用 所以放弃枚...

刘鑫的博客 633

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android 性能优化之:替代Android上的enum

一,enum基本用法 1,枚举常量和数据有关联 定义: public enum TaskStatus { UN_KNOW(-1, "未知", "#84807f"), UN_START(0, "未开始", "#e2d512"), PROGRESSING(1, "进行中", "#12ea2f"), COMPLETED(2, "已完成", "#c30910...

lerous的专栏 584

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android 中如何使用 enum / 枚举

他在Android文档中看到过这样的提示AvoidEnumsWhereYouOnlyNeedInts。基本意思就是,在你只需要int(整形)的时候,不要使用枚举,这会影响你的性能。后来我在Android项目开发中,尝试大量使用enum,结果其他同事告诉我说Android中使用enum是会影响性能的!那果真这样吗,我也Google了相关问题,看到了不同的答案。其中,我们看到,使用枚举定了16个头像常量。接下来就看他的几个基本使用方法。所有,随着虚拟机的提升,使用枚举已经不再会影响性能。...

wuxiaopengnihao1的博客 972

Android使用@IntDef和枚举enum限制元素取值范围的比较

枚举的作用就是 定义此元素允许的常量 1.使用@IntDef限制元素的取值范围 package com.wong.ex; import androidx.annotation.IntDef; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; public class MainActivity extends AppCompatActivity { //先定义 常量 pu

weixin_40763897的博客 2612

Android 性能:避免在Android上使用ENUM

Android 性能:避免在Android上使用ENUM# ENUM是什么,为什么使用它 `Enum`是Java中包含固定常量的数据类型。当需要使用预先定制的几个值,这几个值表示一些数据类,这时我们可以用`ENUM`。在一些可能的值中取一个值时很适合用`Enums`。例如:

小小程序员 5256

android 列表枚举,Android 中实现枚举的方案选择

Android 中实现枚举的方案选择:enum、static final 与 IntDef引言:曾经有一段时间,许多网上的 Android 性能调优的文章都提到,要尽量避免在 Android 中使用 enum,因为使用 enum 会引入较大的性能损失。这个当时和同事、领导进行了长时间的讨论、验证,最后还是放弃了enum。然而,最新的 Android 文档已经改变了这一说法。根据 Android V...

weixin_39875031的博客 437

android 方法加final,enum、static final 与 IntDef:Android 中实现枚举的方案选择

前述曾经有一段时间,许多网上的 Android 性能调优的文章都提到,要尽量避免在 Android 中使用 enum,因为使用 enum 会引入较大的性能损失。然而,最新的 Android 文档已经改变了这一说法。根据 Android VM 的开发者Elliot Hugues 的博客所述,过去的 Android 官网的性能优化指南并不准确,混杂了许多臆断。因此如今他们严格地依据事实,重写了Andr...

weixin_42126399的博客 282

Android中不推荐使用Enum的原因

参考 https://www.cnblogs.com/zgz345/p/5871351.html 总结:不可否认enums会使得代码更易读更安全,但是在编写高效Android代码时避免使用枚举,我们在很多经典的Java书已经看到推荐使用枚举来代替int常量了,但是在Android开发中我不建议使用枚举,特别是大型的App中,能不用则不用。因为它会牺牲执行的速度和并大幅增加文件体积。这也是性能优化中...

hizhangyuping的博客 1168

Android中是否推荐使用枚举Enum

一、Enum的产生Java1.5中引入了枚举的语法,包括Enum,EnumSet,EnumMap等。其中Enum就是我们在C或C++中见过的枚举类型,但是Java中的枚举...

Android技术之家 781

Android @IntDef注解取代Java enum枚举提高性能

Android @IntDef注解取代Java enum枚举提高性能为提高Android性能,Android官方建议使用@IntDef注解替代Java的enum枚举。@IntDef的使用给出一个例子,先建立@IntDef数据结构模型,例如MyDay.java:package zhangphil.test; import android.support.annotation.IntDef; im...

Zhang Phil 2955

关于Java中枚举Enum的深入剖析

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java! 在编程语言中我们,都会接...

chuifuhuo6864的博客 101
上一篇: Android Studio : 使用 jni 实现串口通讯
下一篇: SVN:上传代码自动过滤了.so文件的解决方法
doris_d
博客等级 码龄12年 79粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值