数据结构:
数据结构:组合和存储数据的。
分为逻辑结构和物理结构两大类。
逻辑结构:
1.集合结构:集合结构中数据元素除了属于同一个集合外,它们之间没有任何其它的关系。
2.线性结构:数据元素之间存在一对一的关系。
3.树形结构:一对多。
算法时间复杂度
核心操作的次数和输入规模
堆和栈
1概述
Java虚拟机在运行时都要开辟空间。
2.堆内存
堆是java虚拟机所管理的内存中最大一块存储区域。堆内存被所有线程共享,主要存储Java中的对象和数组,当我们new一个对象或者数组时,就会在堆内存中开辟一块空间,用于存放这个对象或者数组。
堆内存特点:
①.堆可以类似地看作管道,特点是:先进先出,后进后出。
②.堆可以在运行时动态分配内存大小,生存期不需要事先告诉编译器。因为它是在运行时动态分配内存,它的存取速度会比较慢。
3.栈内存
定义:
JVM中的栈包括java虚拟机栈和本地方法栈,两者的区别是,java虚拟机栈为jvm执行java方法服务,本地方法栈为JVM使用到的Native方法服务。
栈是限定仅在表头进行插入和删除操作的线性表,即入栈和出栈都是对栈顶元素进行操作的。栈是线程私有的,生命周期与线程相同。每个线程都会分配一个栈空间,每个线程拥有独立的栈空间。栈中的元素为栈帧,每个方法执行时都会创建一个栈帧。栈帧中存储了局部变量表,操作数栈,动态连接和方法出口等信息。每个方法从调用到运行结束的过程,就对应着一个栈帧在栈中从入栈到出栈的过程。
其中局部变量表中存储了基本数据类型的局部变量和对象的引用(String、数组、对象等),但是不存储对象的内容。
栈内存是Java的另一种内存,可以用来存储局部变量,定义在方法中的都是局部变量(方法外为全局变量),for循环内部定义的也是局部变量。需要先加载函数才能进行局部变量的定义。
栈内存的特点:
①.先进后出,后进先出;
②.存取速度比堆更快,仅次于寄存器。栈中的数据可以共享,但是缺点是,存在栈中的数据大小是固定的,缺乏灵活性。
数据共享:
int a = 3;
int b = 3;
第一步处理:
1.编译器先处理int a = 3;
2.创建变量a的引用;
3.在栈中查找是否有3这个值;
4.没有找到,将3这个值存入栈中,a指向3。
第二步处理:
1.处理b=3;
2.创建变量b的引用;
3.在栈中找是否有3这个值,找到,直接将b指向3.
第三步处理:
1.a=4;
同上方法,a会指向4,b的值不会发生改变。
注意:如果是两个对象的话,就不同了。对象的话指向的是同一个引用,一个发生改变,另一个也会发生改变。
4.堆和栈的区别
JVM是基于堆栈的虚拟机。JVM为每个新创建的线程都分配一个堆栈。对于一个Java程序来说,它的运行是通过对堆栈的操作来完成的,堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。
区别:
- 堆内存用来存放新创建的对象和数组。
- 栈内存用来存放方法或者局部变量等。
- 堆是先进先出,后进后出
- 栈是后进先出,先进后出
相同点:
- 都是属于java内存的一种