标签:内存 主函数 jce 就是 数值 垃圾回收 log str ack
装箱 就是把“值类型”转换成“引用类型”(Object);
拆箱 就是把“引用类型”转换成“值类型”;
引用类型:基类为Objcet
值类型:均隐式派生自System.ValueType:
值类型:byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型
引用类型:string 和 class统称为引用类型。
说起值类型和引用类型就会说到堆和栈的问题,那什么是堆什么是栈呢?他们之间又有什么区别的呢?
https://www.cnblogs.com/lanr/articles/5723920.html
1、堆栈空间分配
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
2、堆栈缓存方式
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
3、效率比较
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
4、存储内容
栈: 在函数调用时,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排
标签:内存 主函数 jce 就是 数值 垃圾回收 log str ack
原文地址:https://www.cnblogs.com/gyjjyg/p/12442774.html