Java 初识篇-【笔记一】

大家好,我是Joeyzx7000 优点(喜欢人或物件,得需要知道喜好或者优势)

  1. 封装:将其事物的具体实现逻辑加以封装起来,并对外只提供该业务功能接口。简化三方使用。
  2. 继承:程序中通过继承的方式(extends、implement),让其子类具有父类的特性。
  3. 多态:程序中通过封装、继承的方式来达到事物的多态模型。比如重载与重写就是多态的体现。
构成 基本数据类型
  1. 数据类型:byte、short、int、long
  2. 浮点类型:float、double
  3. 字符类型:char
  4. 布尔类型:boolean
数组 Collection
List、Set、Queue
Map
HashMap、HashTable、CourrentHashMap、LinkedHashMap、TreeMap
类加载 程序执行过程
  1. 编译:将其java文件转换为class文件;
  2. 验证:检验java文件语法是否正确;
  3. 准备:对其静态属性修饰的变量与代码块,分配方法区内存空间;
  4. 解析:将常量池的符号替换为直接引用的过程;
  5. 初始化:对象新建并创建对应的堆栈空间;
  6. 运行:bean周期的运行空间;
加载方式
  • 显示加载:class.forName()方法创建;
  • 隐式加载:通过new创建对象;
类加载器
  • 引导类加载器(Bootstrap)
  • 扩展类加载器(Exetensions)
  • 应用类加载器(Application/System)
双亲委派模型
一个类加载器接收到类加载请求的时候,该类加载器首先不会自己去加载,而是把这个请求交由给父类加载器去执行。如果父类无法加载该类,则交由给子类加载器去完成加载。如果子类加载器无法加载该类,则会报错classNotFoundException异常。
反向委派机制 JVM 构造结构
  • 堆:内存共享区,存储对象的实例和数组。物理地址是不连续的,所以性能比较慢。内存是在程序运行期间确认的。一般内存远大于栈。
  • 方法区:存储静态变量、常量池、字符串池
  • 栈:方法执行的线程模型,生命周期与线程相同,主要存储局部变量表、操作数栈、方法出口、动态链接。物理地址是连续的,满足先进后出的原则,性能快。
  • 本地方法栈:Native方法
  • 程序计数器:字节码的行号指示器
垃圾回收机制 原理
创建对象时,GC开始监控这个对象的地址、大小以及使用情况
回收方式
可达性分析:自动回收机制
System.gc():主动回收机制
回收算法
标记清除:标记无用对象,进行清除操作
复制:按照容量大小划分为两个大小相同的区域,当一块用完的时候将活着的对象复制到另一块上,然后把已使用的内存空间一次清理掉
标记整理:标记无用对象,让所有存活对象都向一端移动,然后直接清除掉端边界以外的内存
分代:新生代采用复制,老年代采用的是标记整理
拷贝
  • 浅拷贝:只是增加一个指针,指向已存在的内存地址
  • 深拷贝:既增加指针,也增加新的内存
内存溢出
不再被使用的对象或者变量一直被占据在内存中,长生命周期存在,引用短生命周期,迟迟不释放。
线程 创建方式
  • 无返回值:Tread、Runnable
  • 返回值:Callable
面向接口编程层次清晰,编码复杂;thread编程简单,但是不能继承其它父类
状态
新建、就绪、运行、阻塞、死亡、等待
【Java 初识篇-【笔记一】】Java 初识篇-【笔记一】
文章图片

同步方法 synchronized
代码块、方法
volatile
提供变量内存的可见性(没有存储在寄存器中),不会提供原子操作。可防指令重排序(程序在实例化一个对象可以分为三个步骤:分配内存空间、初始化对象、将内存空间的地址赋值给对应的引用,但是由于系统的指令重排序,会将第三步与第二步互换)。
reentrantLock
可重入、互斥、是否公平锁选取
原子变量(atomic)
即使命令涉及多个操作,这些操作依次执行
关键词 synchronized 锁类型
  1. 偏向锁:同一线程获取锁后,继续一直占用锁的状态。
  2. 轻量锁:多线程处理时,这时锁cas操作时,锁会自旋,减少用户态与核心态之间的交换,用于占用时间较少的线程
  3. 重量锁:多线程处理时,锁自旋到一定程度,会转变为重量级锁,会阻塞线程。
优化
  • 自旋操作:准备获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁。
  • 锁清除与锁粗化
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,事件驱动模式进行的。适用于链接数目多且连接比较长(重操作)的架构。

    推荐阅读