![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
trytrylmt
这个作者很懒,什么都没留下…
展开
-
JavaIO的NIO
NIO弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O。目录流与块通道与缓冲区缓冲区状态变量文件NIO实例选择器套接字NIO实例内存映射文件流与块IO:以流方式处理数据 一次处理一个字节数据(较慢)NIO(非阻塞的):以块的方式处理数据 一次处理一个数据块通道与缓冲区通道:可以通过它读取和写入数据(可同时用于读写),双向的(对...原创 2020-01-27 22:11:07 · 88 阅读 · 0 评论 -
JavaIO对象操作、网络操作
目录对象操作序列化Serializabletransient网络操作InetAddressURLSocketsDatagram对象操作序列化序列化就是将一个对象转换成字节序列,方便存储和传输。序列化:ObjectOutputStream.writeObject() 反序列化:ObjectInputStream.readObject()不会对静...原创 2020-01-27 21:37:04 · 118 阅读 · 0 评论 -
JavaIO(一)分类、磁盘操作、字节操作、字符操作
目录1.JavaIO的分类2.磁盘操作3.字节操作实现文件复制装饰者模式4.字符操作(1)解码与编码(2)String的编码方式(3)Reader与Writer(4)实现逐行输出文本文件的内容1.JavaIO的分类磁盘操作:File 字节操作:InputStream 和 OutputStream 字符操作:Reader 和 Writer 对象操...原创 2020-01-27 21:07:18 · 191 阅读 · 0 评论 -
Java虚拟机之类加载机制
类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。目录1.类的生命周期2.类加载过程3.类初始化时机1.主动引用2.被动引用4.类加载器分类Java 虚拟机的角度:Java开发人员的角度:双亲委派模型:1.类的生命周期包括以下 7 个阶段:加载(Loading) 验证(Verifi...原创 2020-01-26 21:37:08 · 88 阅读 · 0 评论 -
Java虚拟机之内存分配与回收策略
目录Minor GC和Full GC内存分配策略1.对象优先在Eden分配2.大对象直接进入老年代3.长期存活的对象进入老年代4.动态对象年龄判定5.空间分配担保Full GC的触发条件1.调用System.gc()2.老年代空间不足3.空间分配担保失败、4.JDK1.7及以前的永久代空间不足5.Concurrent Mod FailureM...原创 2020-01-26 21:13:13 · 77 阅读 · 0 评论 -
Java虚拟机之垃圾收集
垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。目录判断一个对象是否可被回收1.引用计数算法2.可达性算法3.方法区的回收4.finalize()引用类型1.强引用2.软引用3.弱引用4.虚引用垃圾收集算法1.标记-清除...原创 2020-01-26 20:52:48 · 93 阅读 · 0 评论 -
Java虚拟机之运行时数据区域
目录程序计数器Java虚拟机栈本地方法栈堆方法区运行时常量池直接内存HotSpot虚拟机(扩展)程序计数器记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。Java虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 J...原创 2020-01-26 19:41:34 · 69 阅读 · 0 评论 -
Java并发之锁优化
锁优化:自旋锁锁消除锁粗化轻量级锁偏向锁锁优化主要是指 JVM 对 synchronized 的优化。自旋锁自旋锁的思想是让一个线程在请求一个共享数据的锁时执行忙循环(自旋)一段时间,如果在这段时间内能获得锁,就可以避免进入阻塞状态。自旋锁虽然能避免进入阻塞状态从而减少开销(互斥同步进入阻塞状态的开销都很大),但是它需要进行忙循环操作占用 CPU 时间,它...原创 2020-01-26 19:21:01 · 108 阅读 · 0 评论 -
Java并发之线程安全
多个线程不管以何种方式访问某个类,并且在主调代码中不需要进行同步,都能表现正确的行为。线程安全的几种实现方式:1.不可变2.互斥同步3.非阻塞同步4.无同步方案1.不可变不可变(Immutable)的对象一定是线程安全的,不需要再采取任何的线程安全保障措施。只要一个不可变的对象被正确地构建出来,永远也不会看到它在多个线程之中处于不一致的状态。多线程环境下,应当尽量使对象...原创 2020-01-24 17:45:47 · 1565 阅读 · 0 评论 -
Java并发之Java内存模型
目录主内存与工作内存内存间交互操作内存模型三大特征先行发生原则Java 内存模型试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。主内存与工作内存所有的变量都存储在主内存中,每个线程还有自己的工作内存,工作内存存储在高速缓存或者寄存器中,保存了该线程使用的变量的主内存副本拷贝。线程只能直接操作工作内存中的变量,...原创 2020-01-24 17:04:50 · 134 阅读 · 0 评论 -
Java并发之java.util.concurrent
目录J.U.C-AQSCountDownLatchCyclicBarrierSemaphoreJ.U.C-其他组件FutureTaskBlockingQueueForkJion线程不安全示例J.U.C-AQSjava.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心。CountDownL...原创 2020-01-23 18:27:08 · 212 阅读 · 0 评论 -
Java线程的状态
目录新建(NEW)可运行(RUNABLE)阻塞(BLOCKED)无限期等待(WAITING)限期等待(TIMED_WAITING)死亡(TERMINATED)新建(NEW)创建后尚未启动。 可运行(RUNABLE)正在 Java 虚拟机中运行。但是在操作系统层面,它可能处于运行状态,也可能等待资源调度(例如处理器资源),资源调度完成就进入运行状...原创 2020-01-23 17:23:21 · 127 阅读 · 0 评论 -
Java并发之互斥同步、线程之间的协作
目录互斥同步一、synchronized二、ReentrantLock:java.util.concurrent(J.U.C)包中的锁。比较使用选择线程之间的协作join()wait() notify() notifyAll()await() signal() signalAll()互斥同步Java 提供了两种锁机制来控制多个线程对共享资源...原创 2020-01-23 16:43:25 · 153 阅读 · 0 评论 -
Java并发之线程、基础线程机制、中断
一、使用线程1.使用线程的三种方法实现 Runnable 接口; public class MyRunnable implements Runnable { @Override public void run() { // ... }}public static void main(String[] args) { MyRunna...原创 2020-01-23 15:58:10 · 197 阅读 · 0 评论 -
Java容器的源码分析
目录ArrayListVectorCopyOnWriteArrayListLinkedListHashMApConCurrentHashMapLinkedHashMapWeakHashMapConcurrentCache基于JDK1.8ArrayListpublic class ArrayList<E> extends Abs...原创 2020-01-22 15:56:37 · 1622 阅读 · 0 评论 -
Java容器的设计模式
迭代器模式Collection 继承了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个对象就可以迭代遍历 Collection 中的元素。适配器模式java.util.Arrays#asList() 可以把数组类型转换为 List 类型。Integer[] arr = {1, 2, 3};List list = Arra...原创 2020-01-22 15:16:51 · 270 阅读 · 0 评论 -
Java容器的概述(Set、List、Map、Queue)
1.Set(无重复元素、无序)TreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。 HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果...原创 2020-01-21 16:28:15 · 135 阅读 · 0 评论 -
Java基础之反射、异常、泛型、注解
1.反射每一个类都有一个class对象,.class文件保存着class对象,类加载相当于class对象的加载。反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的 .class 不存在也可以加载进来。Class 和 java.lang.reflect 一起对反射提供了支持,java.lang.reflect 类库主要包含了以下三个类:Field:可...原创 2020-01-21 15:51:16 · 269 阅读 · 0 评论 -
Java基础之继承
1.访问权限修饰符 本类 同一个包的类 继承类 其他类 private √ × × × default √ √ × × protected √ √ √ × public √ √ √ √ 如果子类的方法重写了父类的方法,那么子类中该方法的访问级别不允许...原创 2020-01-21 15:16:36 · 183 阅读 · 0 评论 -
Java基础之Object通用方法
Object通用方法1.equals()(1)等价关系五个条件:自反性 对称性 传递性 一致性 与null的比较x.equals(null); // false; x不是null对象(2)等价于相等对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。 对于引用类型,== 判断两个变量是否引用同一个对象,而 equals() 判断引...原创 2020-01-21 10:31:03 · 209 阅读 · 0 评论 -
Java基础之运算、关键字
运算参数传参本质上是将对象的地址以值的方式传递到形参中在方法中改变对象的字段值会改变原对象该字段值,因为引用的是同一个对象。方法里和方法外的两个指针指向了不同的对象。float与doubleJava 不能隐式执行向下转型,因为这会使得精度降低。1.1f 字面量才是 float 类型。1.1 字面量属于 double 类型字面量 1 是 int 类型使用 +=...原创 2020-01-20 11:21:27 · 103 阅读 · 0 评论 -
Java基础之数据类型、String
一、数据类型基本类型 8个byte/8 char/16 short/16 int/32 float/32 long/64 double/64 boolean/~ JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false包装类型基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成...原创 2020-01-13 21:33:36 · 117 阅读 · 0 评论