new关键字
表示创建一个对象;
表示实例化对象;
表示申请内存空间。
Java的内存分配
栈:存储局部变量(基本数据类型的数据+引用数据类型的对象的引用)
堆:存储所有new出来的(引用数据类型的数据)
静态域:存储所有通过static修饰的(静态域中对象的数据是共享的,改变一个对象数据全部改变)
常量池:存储所有通过final修饰的和String无new赋值类型//String s = "我是s";(常量池中的值不能变)
栈内存和堆内存的区别
栈:数据使用完毕,就消失。
堆:每一个new出来的东西都有地址,每一个变量都有默认值。数据使用完毕后,在垃圾回收器空闲的时候回收。
类型 | byte | short | int | long | float | double | char | boolean | 引用数据类型 |
默认值 | 0 | 0 | 0 | 0 | 0.0 | 0.0 | '\u0000'(空格) | false | null |
栈、堆区别总结
栈堆空间分配
- 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
- 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
栈堆缓存方式
- 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
- 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
栈堆数据结构区别
- 栈(数据结构):一种先进后出的数据结构。
- 堆(数据结构):堆可以被看成是一棵树,如:堆排序。
数据结构
数据的组织方式。
栈
先进后出,入口(压栈),出口(弹栈)。
队列
先进先出。
数组
存储同一种类型的多个元素的容器,查询快,增删慢。
链表
由一个链子把多个结点连起组成的数据,查询慢,增删快。
结点:由数据和地址组成。(数据域和指针域组成。)