java数据类型应按需选择:小范围整数用byte/short,非高精度场景用float,优先原始数组和stringbuilder,避免包装类和字符串+拼接。

Java 数据类型选得准,内存就省得多,运行也更稳。关键不是一味追求最小化,而是根据实际数据范围、访问模式和业务约束做合理取舍。
按需选择整数类型,别默认全用 int
int 占 4 字节,看似“够用”,但若你处理的是状态码(0–100)、HTTP 响应码(100–599)或像素灰度值(0–255),byte(1 字节)或 short(2 字节)完全胜任。百万级数组中,用 byte 替代 int 可节省约 3MB 内存;用 short 替代 int 节省约 2MB。注意:运算时会自动提升为 int,不影响逻辑,但存储层实实在在省了空间。
- 值域 ≤ 255 → 优先用 byte
- 值域 ≤ 65535 → 考虑 short(尤其在 DTO、POJO 或序列化场景)
- 避免在循环内对 byte/short 做频繁强制转换,保持语义清晰即可
浮点计算慎选 float,精度与内存需权衡
float 占 4 字节,double 占 8 字节。科学计算、金融金额必须用 double;但图像处理、传感器原始采样值、游戏坐标偏移等对精度不敏感的场景,float 完全可用。例如,一个含 10 万个坐标的 float[] 比 double[] 少占 400KB 内存,GC 压力明显降低。
- 非金融、非高精度物理模拟 → float 是合理默认
- 声明时显式加 f 后缀(如
3.14f),避免编译器误推为 double - 避免混合使用 float/double 运算,防止隐式提升带来冗余转换
集合与对象:能用基本类型就别用包装类
Integer 对象至少占 16 字节(对象头 + value 字段 + 对齐填充),而 int 仅 4 字节。List
- 内部计算、数组密集型操作 → 用 int[]、long[]、double[] 等原始数组
- 需要泛型集合时,优先考虑 FastUtil、Trove 等支持原始类型集合的库
- 局部变量尽量用基本类型;包装类只在必须 null 表达、泛型约束或 API 接口要求时才引入
字符串拼接与复用:StringBuilder 是标配,intern 要谨慎
字符串不可变,+ 拼接会在循环中生成大量中间对象。StringBuilder 复用同一缓冲区,内存友好;String.intern() 虽可去重,但常量池位于堆中(Java 7+),Full GC 才清理,滥用易引发内存堆积。
- 循环内拼接 → 必用 StringBuilder(预设 capacity 避免扩容)
- 已知字符串内容固定且重复率高(如协议字段名、枚举标识)→ 可考虑 intern(),但需配合监控验证效果
- 读取配置、日志模板等静态文本 → 直接定义为 static final String,由 JVM 自动优化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











