zoukankan      html  css  js  c++  java
  • 无法逃避的装箱和拆箱

    概念

    装箱:由值类型转换为引用类型

    拆箱:由引用类型转换为值类型

    代码解析

    逐步分析以上代码:

    1 int i=5; 在栈中新建变量i,值为5

    2 object o=i;在堆中新建变量o,储存实际值5,并将5在堆中的地址储存在栈中

    3 int j=(int)o;在栈中新建变量j,通过栈中o的地址访问对应内存的值,并将该值储存在栈中j的地址上

    图解

    补充

    从代码分析和图解可以看出装箱和拆箱存在以下问题:

    1 占用空间,装箱和拆箱在堆和栈上开辟空间,已占用的空间无法及时回收

    2 性能影响,拷贝占用CPU,额外的资源开销

    疑惑解答

    为什么装箱比拆箱开销大?

    从图上可以看出装箱和拆箱都涉及空间的开辟,但装箱不仅有指针耗费,还有拷贝占用CPU资源,从这两点上说装箱比拆箱更占用资源。

    建议:尽量避免使用装箱和拆箱

  • 相关阅读:
    UVa-10317
    UVa-1595
    UVa-10391
    UVa-10763
    UVa-10935
    UVa-1594
    UVa-1593
    从CSDN搬过来了
    memset会显著增加时间和空间的消耗吗
    memset对数组的初始化
  • 原文地址:https://www.cnblogs.com/arvinzd/p/14143906.html
Copyright © 2011-2022 走看看