Java学习
文章平均质量分 77
梨子栗子狸
这个作者很懒,什么都没留下…
展开
-
AQS源码的不完全分析
一、 AQS中队列元素的部分重要属性 static final class Node { /**共享结点 */ static final Node SHARED = new Node(); /** 独占节点 */ static final Node EXCLUSIVE = null; /** 因为超时或中断,结点被设置为取消状态,被取消的结点不会参与竞争,取消状态不会被改变 */ static final原创 2021-02-20 22:57:54 · 92 阅读 · 0 评论 -
CAS
1. 什么是CASCAS全称CpmpareAndSwap,比较并交换。CAS操作包含三个参数——内存位置(V)、旧的期望值(A)、新值(B),如果内存位置的值与A一致,则用新值代替。值得一提的是该操作是具有原子性的。2. Java中支持的CAS操作 // 修改引用类型的属性 public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5); //修改int类型的原创 2021-02-19 15:43:34 · 100 阅读 · 0 评论 -
JVM笔记(三)—— Java内存模型与线程
1. 什么是Java内存模型Java内存模型(JMM)设计的目的是为了保证Java程序在各种平台下都能无视硬件和操作系统差异,保证程序访问内存的一致性。JMM规定一切变量存储于主内存当中,每个工作线程都有一个属于自己的工作内存。工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的操作只能发生在工作内存当中,而不能直接读写主内存中的变量。不同线程无法直接访问其他线程的工作内存,线程之间变量值的传递需通过主存过渡。2. 主内存与工作内存的交互2.1 交互操作JMM定义了以下8中操作原创 2021-02-16 23:31:48 · 87 阅读 · 0 评论 -
JVM笔记(二) —— GC中垃圾收集算法以及垃圾收集器
一、GC算法思想1. 新生代的GC新生代中的对象特点:存活率低1.1 标记-清除算法算法步骤对新生代中的对象进行标记(标记算法上一篇提到过)对标记的对象进行清除问题:空间碎片化标记和清除的效率不高1.2 复制算法将新生代内存分为1块较大的Eden空间和2块较小的Survivor空间,HotSpot默认E:S的大小比例为8:1。新生代对象每次使用整个Eden空间和1块Survivor空间。算法步骤:对新生代中的对象进行标记(同上)回收时,将Eden和Survivo原创 2021-02-10 21:42:58 · 184 阅读 · 1 评论 -
JVM笔记——对象的创建以及GC中对象存活的判定(一)
1、JVM中对象的创建(仅限于普通对象,不包含数组和Class对象等)遇到new指令时,去常量池定位相应类的符号引用检查该符号引用是否被加载、解析和初始化过若2检查不通过,则去加载相应的类加载过后为新生对象分配内存,内存分配有以下两种方式指针碰撞:前提是堆中内存绝对规整,即用过的内存放在一边,未用过的放在一边,中间放着一个指针作为分界点空先列表:若堆中内存不规整则可采用此种方式,虚拟机维护一个空闲内存列表分配内存可能会引发线程的安全问题,有以下两种方案:堆内存分配动作进行同步操原创 2021-02-07 23:42:30 · 183 阅读 · 0 评论 -
JVM内存结构和Java内存模型
JVM内存结构JVM的内存结构被划为5个部分,分别是Java堆区、方法区、本地方区、虚拟机栈、程序计数器。Java堆区:用于存放类的实例化对象,Java程序中的参数传递都是引用传递,引用的实例对象存储在堆当中,当对象过多时会发生内存溢出也就是OOM.方法区:用于存放加载的类的信息、常量、静态变量、即时编译(JIT)的结果、域(Field)信息、方法(Method)信息 等。1.加载的类...原创 2019-12-06 15:52:16 · 117 阅读 · 0 评论 -
泛型
1. 基础理解1.1 定义泛型接口、类可将List<E>理解为一种特殊类型泛型的实质:允许在定义接口、类时声明泛型形参,泛型形参可在整个接口、类内部使用。如以下代码:public class Apple<T> { private T info; //构造器不需要加泛型 public Apple(){} public Apple(T info){ this.info = info; } public T g原创 2021-02-05 23:12:07 · 66 阅读 · 0 评论 -
类加载机制
1.类的加载、连接和初始化当程序需要使用某个类,但该类还未加载到内存时,系统会通过加载、连接和初始化三个步骤来对该类进行初始化。一般来说,这三个步骤会一气呵成,所以有时也把这三个步骤统称为类加载或类初始化。1.1 类的加载类加载指的是将该类的class文件读入内存,并为之创建一个java.lang.Class对象类的加载由类加载器完成,类加载器一般有JVM提供,开发者也可通过继承ClassLoader基类来自定义。1.2 类的连接该阶段负责把类的二进制数据合并到JRE中。类连接可分为如下三个原创 2021-02-01 16:02:41 · 78 阅读 · 0 评论 -
I/O(三)—— AIO
一、I/O的划分I/O操作可分为两步:程序发出I/O请求完成实际的I/O操作针对第一步我们将I/O分为阻塞I/O(BIO)和非阻塞I/O。针对第二步,依据I/O操作是由应程序本身去执行,还是委托给操作系统去执行,然后将结果返回给应用程序,我们可以将I/O划分为同步I/O和异步I/O(AIO)。前面介绍的传统I/O、基于Channel的非阻塞I/O实际都是同步I/O。二、同步、异步和阻塞、非阻塞的组合三、AIO的使用服务器端的使用调用open()方法创建AsynchronousServ原创 2021-01-28 19:09:42 · 224 阅读 · 0 评论 -
I/O(二)—— NIO
一、NIO概述IO是阻塞的,NIO是非阻塞式的IO是面向流的(一次处理一字节,效率不高),NIO是面向块的IO是单线程的,NIO 是通过选择器来模拟多线程的NIO在基础的IO流上发展处新的特点,分别是:内存映射技术,字符及编码,非阻塞I/O和文件锁定。Channel(通道)和Buffer(缓冲)是NIO中的两个核心对象。Channel类似于传统IO中的流对象,其与InputStream和OutputStream最大的区别在于它提供了一个map()方法,通过该map()实现将一块数据直接映射原创 2021-01-25 21:49:18 · 384 阅读 · 0 评论 -
对象序列化
一、什么是序列化序列化是指将Java对象转化为与平台无关的二进制流,这些字节序列可以永久的保存在磁盘上或通过网络传输传到其他网络节点。如果某个类是可序列化的,则该类必须实现以下两个接口之一:SerializableExternalizable二、对象的序列化使用对象流实现序列化创建ObjectOutputStream。该流是一个处理流需要建立在其他节点流的基础之上。调用ObjectOutoutStream的writeObject()方法输出可序列化对象。反序列化步骤创建原创 2021-01-25 16:35:51 · 435 阅读 · 0 评论 -
I/O(一)
一、前言Java当中的I/O流使用了装饰器模式,他将I/O流分为底层节点流和上层处理流,其中节点流和底层的物理节点直接关联——不同的物理节点获取结点流的方式可能存在一定差异,但Java把不同的节点流包装成统一的处理流,从而允许程序使用统一的输入输出代码来读取不同物理存储节点的资源。二、理解I/O流输入、输出流都是从内存的角度划分的。字符流和字节流的用法几乎完全一样。区别在于所操作的数据单元不同——字节流操作的数据单元是8位的字节,字符流操作的数据单元是16位的字符。字节流主要以InputStre原创 2021-01-24 21:46:48 · 272 阅读 · 1 评论 -
Java笔记(八)——Map
一、简介 Map接口下存在实现类HashMap、LinkedHashMap(前者的子类)、EnumMap,并有子接口SortedMap,该子接口下有TreeMap。仔细观察可以发现Map接口下的派生类与Set接口下的派生类十分相似,至少从名字上就不难看出。 Map对象中存储的对象以键值对的形式存在,其中key不允许重复,value可以重复。key集合可以理解为一个Set集合,...原创 2020-03-31 10:38:21 · 87 阅读 · 0 评论 -
Java讲义笔记(七)——List集合、Queue集合
一、List集合简介List集合接口属于Collection接口的一个子接口,其实现类有LinkedList、ArrayList、Vector、Stack。List集合的特点是存储的元素是无序的、允许重复的。二、ArrayList和Vector实现类 这两个实现类的底层都是基于数组实现的,所以他们实际上是封装了一个动态的、可再分配的数组。在构造ArrayList和Vector...原创 2020-03-27 20:17:07 · 205 阅读 · 0 评论 -
Java讲义笔记(六)——Set集合
一、前言 Java集合类主要由两个接口派生而出,一个是Collection接口另一个是Map接口。Collection接口下又派生出Set、List、Queue(Java5之后出现)。 Set接口下派生出子接口SortedSet(TreeSet类),EnumSet、HashSet(LinkedHashSet)...原创 2020-03-25 21:57:43 · 120 阅读 · 0 评论 -
创建一个Mybatis项目
Mybatis学习之路(一)一、Mybatis+Maven构建web项目第一步第二步:一路next。最后Finish第三步:创建项目目录,也就是红框框里得第四步:在pom.xml添加依赖 <dependencies> <!-- ********************** Java Servlet API 4.0.0-b01 ***************...原创 2020-03-20 00:31:11 · 221 阅读 · 0 评论 -
使用Java将当前目录下的内容复制到另一个目录下
问题描述将《作业原始》文件夹中的内容(仅包括文本文件和目录)复制到《作业目标》下的《作业复制》文件夹中,文件内容也要使用流进行完整复制。代码//树结点public class Node { private Node left; private Node right; private String name; private String path; ...原创 2020-03-10 23:16:19 · 280 阅读 · 0 评论 -
多线程学习(一)
一、创建线程的三种方式1. 继承Thread类,重写run()方法代码展示public class myThread extends Thread { //成员变量 private String title; //构造方法 public myThread(String title){ this.title=title; } //业...原创 2020-03-10 17:50:12 · 104 阅读 · 0 评论 -
Java读书笔记
第三章Java支持两种变量类型:基本类型,引用类型。Java中的一个整数默认是int型。给出一个小数,默认是double类型。float a=2.0;是错的,正确得应是float a=2.0f;计算机中以补码的形式存放所有整数。正数的补码就是其原码,负数的补码是符号位不变其他位取反再加1。并不是任何数除以0都报错。整数除0抛出异常。浮点数运算中除0得正无穷或负无穷。能指定直接量的只有...原创 2020-03-06 17:40:34 · 634 阅读 · 0 评论 -
Java多态性
一、多态的基本概念Java中的多态性是面向对象中的第三大主要特征(其余两个是封装和继承)。多态性实际上是在继承的基础上扩展出来的。二、方法的多态性主要体现在以下两个方面方法的重载(Overload) 这种现象主要发生在同一个类中,对于两个或多个方法,他们拥有相同的方法名,但是方法的参数类型或者数目不同,则称为发生了方法的重载。方法的重载与方法的返回类型无关。也就是说如果两个方法仅返回值...原创 2020-03-02 17:04:07 · 985 阅读 · 0 评论 -
String类的理解
一、String类简介 字符串类型在严格意义上来说并不算是一个基本类型,Java当中的字符串类型实际上是为了方便开发者开发而编写的一个类。字符串类型在Java中存储实际上是以一种数组的形式保存的。在jdk1.8及以前用来保存字符串的数组是char类型的,而1.9及更高版本的字符串数组则是byte型的。二、String类型的实例化方法比较直接赋值String str = ...原创 2020-02-25 15:50:06 · 181 阅读 · 0 评论