前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊long类型装箱和拆箱性能问题

聊聊long类型装箱和拆箱性能问题

作者头像
查拉图斯特拉说
发布2023-12-18 12:36:14
1310
发布2023-12-18 12:36:14
举报
文章被收录于专栏:后端架构

前言

这个主题主要讨论Java中long类型自己手动装箱和系统自动装箱的性能问题,在Java中,long类型是基本数据类型,Long类型是long的包装类。

手动装箱和自动装箱

手动装箱:通过直接调用Long的valueOf方法,将long装箱为Long

代码语言:javascript
复制
long l = 123;
Long L = Long.valueOf(l);

自动装箱:编译器会自动将基本类型装箱为包装类

代码语言:javascript
复制
long l = 123;
Long L = l; // 自动装箱

代码层面

代码语言:javascript
复制
public class TestLong {
    public static void main(String[] args) {

        Long i = 10L;
        Long j = Long.valueOf(10);
        long n = i + j;
    }
}

编译后结果

代码语言:javascript
复制
% javac TestLong.java
% javap -c TestLong  
警告: 文件 ./TestLong.class 不包含类 TestLong
Compiled from "TestLong.java"
public class com.check.TestLong {
  public com.check.TestLong();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: ldc2_w        #7                  // long 10l
       3: invokestatic  #9                  // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       6: astore_1
       7: ldc2_w        #7                  // long 10l
      10: invokestatic  #9                  // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      13: astore_2
      14: aload_1
      15: invokevirtual #15                 // Method java/lang/Long.longValue:()J
      18: aload_2
      19: invokevirtual #15                 // Method java/lang/Long.longValue:()J
      22: ladd
      23: lstore_3
      24: return
}

从上面的编译结果来看,不管你是否进行了装箱,他都会调用装箱,所以无需担心有额外的性能开销。

性能差异

手动装箱:需要直接调用函数,有一定的性能开销

自动装箱:编译器优化,装箱的开销很小

性能建议

所以从性能角度,自动装箱要优于手动装箱。但是两者的差异也不是特别大,除非在高性能关键代码中,或者装箱的操作非常频繁,对于绝大多数情况,使用自动装箱就可以了。

所以通常建议使用自动装箱,让编译器优化,而不是手动装箱。只有在对性能要求极高的场景中,如果经过测试发现装箱的开销确实很大,才需要考虑手动优化。

总结

在Java中,手动装箱指的是使用Long.valueOf()方法将long基本类型转换为Long对象,而系统自动装箱是指在需要Long对象的地方直接使用long基本类型。性能上,手动装箱会比系统自动装箱更高效,因为手动装箱避免了自动装箱过程中的额外对象创建和内存分配操作。因此,在对性能敏感的场景中,可以考虑使用手动装箱来提升效率。

最后

点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力!

引用

https://www.cnblogs.com/dolphin0520/p/3780005.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 手动装箱和自动装箱
  • 性能差异
  • 性能建议
  • 总结
  • 最后
    • 引用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档