《阿里巴巴Java开发手册(终极版)》1-2之常量定义

编程规约 - 常量定义

修改:第 3 项、第 5 项

  1. 【强制】不允许出现任何魔法值 ( 即未经定义的常量 ) 直接出现在代码中。
    反例:

    String key =" Id # taobao _"+ tradeId;
    cache . put(key ,  value);
  2. 【强制】 long 或者 Long 初始赋值时,必须使用大写的 L ,不能是小写的 l ,小写容易跟数字
    1 混淆,造成误解。
    说明:

    Long a = 2 l; 

    写的是数字的 21,还是 Long 型的 2?

《阿里巴巴Java开发手册(终极版)》1-1之命名规范

编程规约 - 命名规约

修改项:第 3 项

添加项:第 11 项

  1. 【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

    反例:

    _name / __name / $Object / name_ / name$ / Object$
  2. 【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式
    也要避免采用。
    反例:

     DaZhePromotion [ 打折 ] /  getPingfenByName() [ 评分 ] /  int 某变量 = 3

    正例:

     alibaba /  taobao /  youku /  hangzhou 等国际通用的名称,可视同英文。

已经同步最终版

序言

首先,这肯定是一个非常重大的消息。绝对是Java程序员的福利啊,终于结束了一个公司一套规范的编程生涯。这对业界规范来说也起到了很好的推动作用。俗话说:无规矩不方圆,生活中各种法律道德的约束,出门还有交规的限制。相信小伙伴们一定经历过 坑,有了这本规范手册,你是不是该好好学习一下呢?

目录章节

内容分五大类,总共19章节:

索引 一级目录 二级目录
编程规约 命名规约、常量定义、代码格式、OOP规约、集合处理、并发处理、控制语句、注释规约、其它
异常日志 异常处理、日志规约
单元测试
安全规约
MySQL数据库 建表规约、索引规约、SQL语句、ORM映射
工程结构 应用分层、二方库依赖、服务器

Java对象内存占用分析

原文地址:查看原文

序言

之前说过在Android中关于enum的使用,对内存的占用比较大,所以就了解了一下内存占用方面,基本上大同小异,下面是我觉得比较全面的描述,重新排版、整理,如果有时间,希望你能好好了解一下。

下面的内容深入分析并验证了不同Java对象占用内存空间大小的情况。对于不同的jvm实现,Java对象占用的内存空间大小可能不尽相同,本文主要分析HotSpot jvm中的情况,实验环境为64位window10系统、JDK1.8,使用JProfiler进行结论验证。

Java对象内存布局

Java对象的内存布局包括

  • 对象头(Header)
  • 实例数据(Instance Data)
  • 补齐填充(Padding)

对象头:

在64位机器上,默认不开启指针压缩(-XX:-UseCompressedOops)的情况下,对象头占用12bytes,开启指针压缩(-XX:+UseCompressedOops)则占用16bytes。

实例数据:

原生类型(primitive type)的内存占用如下:

Primitive Type Memory Required(bytes)
byte, boolean 1 byte
short, char 2 bytes
int, float 4 bytes
long, double 8 bytes

注:对象引用(reference)类型在64位机器上,关闭指针压缩时占用4bytes, 开启时占用8bytes

Android知识点之enum

序言

问题

enum在Android应不应该使用?

解决方案

关于enum,Android Developers中这样一句话:

enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android

就是说enum比静态常量两倍多的内存占用,应该尽量减少使用。当然了,这里说的是减少并不是禁止,要知道,enum的产生,注定其必定有适合的应用场景,而且它带来的代码简洁性和可读性,都是不可小觑的。

所以,如果在不使用enum的情况下是有替代方案的:

  • 使用静态常量的形式替代
  • 使用Typedef Annotations替代

第一种没什么说的,下面就重点说一说第二种,就是通过注解的形式来代替,注解是由 support 包提供的功能,如果使用,需要添加 support 包到module。

| | 总字数统计:93.5k