1.线程与进程有什么区别?
进程是操作系统资源分配的基本单位
线程是处理器任务调度和执行的基本单位
一个进程含有多个线程,线程是进程的一部分
关于资源分配上,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉,所以进程比线程稳定。
在执行过程中,独立的进程有程序运行的入口、顺序执行序列和进程出口。
线程不能独立执行,必须存在应用程序中,由应用程序提供多个线程执行控制。
一个进程中可以有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器、虚拟机栈和本地方法栈。
程序计数器为什么是私有的?
作用:字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制。例如顺序执行、选择、循环、异常处理
多线程的情况下、程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪。
虚拟机栈和本地方法栈为什么是私有的?
虚拟机栈:每个Java方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调查直至执行完成的过程,就对应着一个栈帧在Java虚拟机栈中入栈和出栈的过程。
本地方法栈:和虚拟机栈所发挥的作用非常相似,区别是:虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到Native方法服务。
堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象,方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译后的代码等数据。
2.堆和栈的区别
堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存
栈空间的内存是由系统自动分配,一般存放局部变量
就空间的大小来说:栈空间比较小;堆空间比较大
就存储的数据来说:栈空间一般存储基本数据类型、对象的地址
堆空间一般存放对象本身。
3.子类重写父类的“两同、两小、一大”原则
方法名相同、参数列表相同
子类方法返回值类型比父类方法返回值类型小或相等、子类方法声明抛出的异常类比父类方法声明抛出的异常小或相等
子类方法访问权限比父类方法访问权限更大或相等
覆盖的方法和被覆盖的方法,要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。否则会发送编译错误。
4.数组和链表的区别
空间分配不同,数组是一块连续的区域并且需要预留空间
链表可以存在任何地方,不要求连续,每个数据都保存了下一个数据的内存地址
效率不同:数组的插入数据和删除数据的效率低,读取效率高,并且不易扩展。
链表增加数据和删除数据容易,但是查找的效率低。
原文:https://www.cnblogs.com/zhou2420032204/p/13546165.html