大家好,我是Joeyzx7000
优点(喜欢人或物件,得需要知道喜好或者优势)
- 封装:将其事物的具体实现逻辑加以封装起来,并对外只提供该业务功能接口。简化三方使用。
- 继承:程序中通过继承的方式(extends、implement),让其子类具有父类的特性。
- 多态:程序中通过封装、继承的方式来达到事物的多态模型。比如重载与重写就是多态的体现。
构成
基本数据类型
- 数据类型:byte、short、int、long
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
数组
Collection
List、Set、Queue
Map
HashMap、HashTable、CourrentHashMap、LinkedHashMap、TreeMap
类加载
程序执行过程
- 编译:将其java文件转换为class文件;
- 验证:检验java文件语法是否正确;
- 准备:对其静态属性修饰的变量与代码块,分配方法区内存空间;
- 解析:将常量池的符号替换为直接引用的过程;
- 初始化:对象新建并创建对应的堆栈空间;
- 运行:bean周期的运行空间;
加载方式
- 显示加载:class.forName()方法创建;
- 隐式加载:通过new创建对象;
类加载器
- 引导类加载器(Bootstrap)
- 扩展类加载器(Exetensions)
- 应用类加载器(Application/System)
双亲委派模型
一个类加载器接收到类加载请求的时候,该类加载器首先不会自己去加载,而是把这个请求交由给父类加载器去执行。如果父类无法加载该类,则交由给子类加载器去完成加载。如果子类加载器无法加载该类,则会报错classNotFoundException异常。
反向委派机制
JVM
构造结构
- 堆:内存共享区,存储对象的实例和数组。物理地址是不连续的,所以性能比较慢。内存是在程序运行期间确认的。一般内存远大于栈。
- 方法区:存储静态变量、常量池、字符串池
- 栈:方法执行的线程模型,生命周期与线程相同,主要存储局部变量表、操作数栈、方法出口、动态链接。物理地址是连续的,满足先进后出的原则,性能快。
- 本地方法栈:Native方法
- 程序计数器:字节码的行号指示器
垃圾回收机制
原理
创建对象时,GC开始监控这个对象的地址、大小以及使用情况
回收方式
可达性分析:自动回收机制
System.gc():主动回收机制
回收算法
标记清除:标记无用对象,进行清除操作
复制:按照容量大小划分为两个大小相同的区域,当一块用完的时候将活着的对象复制到另一块上,然后把已使用的内存空间一次清理掉
标记整理:标记无用对象,让所有存活对象都向一端移动,然后直接清除掉端边界以外的内存
分代:新生代采用复制,老年代采用的是标记整理
拷贝
- 浅拷贝:只是增加一个指针,指向已存在的内存地址
- 深拷贝:既增加指针,也增加新的内存
内存溢出
不再被使用的对象或者变量一直被占据在内存中,长生命周期存在,引用短生命周期,迟迟不释放。
线程
创建方式
- 无返回值:Tread、Runnable
- 返回值:Callable
面向接口编程层次清晰,编码复杂;thread编程简单,但是不能继承其它父类
状态
新建、就绪、运行、阻塞、死亡、等待
同步方法
synchronized
代码块、方法
volatile
提供变量内存的可见性(没有存储在寄存器中),不会提供原子操作。可防指令重排序(程序在实例化一个对象可以分为三个步骤:分配内存空间、初始化对象、将内存空间的地址赋值给对应的引用,但是由于系统的指令重排序,会将第三步与第二步互换)。
reentrantLock
可重入、互斥、是否公平锁选取
原子变量(atomic)
即使命令涉及多个操作,这些操作依次执行
关键词
synchronized
锁类型
- 偏向锁:同一线程获取锁后,继续一直占用锁的状态。
- 轻量锁:多线程处理时,这时锁cas操作时,锁会自旋,减少用户态与核心态之间的交换,用于占用时间较少的线程
- 重量锁:多线程处理时,锁自旋到一定程度,会转变为重量级锁,会阻塞线程。
优化
- 自旋操作:准备获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁。
- 锁清除与锁粗化
CountDownLatch
一个或者多个线程,等待其他多个线程完成某件事情之后才能执行
CyclicBarrier
多个线程互相等待,直到到达同一个同步点,再继续一起执行
IO
类型
- 文件:file
- 字节:inputStream/ outputStream
- 字符:inputReader/ outputWriter
- 网络:Socket
- 对象:Serializable
- 新的输入与输出:NIO
编码
UTF-8、GBK、UTF-16be
形式
BIO
同步阻塞IO,适用于链接数目小且固定的框架
NIO
同步非阻塞IO,selector多路复用器,核心组件(channel[涵盖了TCP、UDP网络IO及其文件IO]、buffer、selector组成)。适用于链接数目多且连接比较短(轻操作)的架构
AIO
异步非阻塞IO,事件驱动模式进行的。适用于链接数目多且连接比较长(重操作)的架构。