
JavaSE
文章平均质量分 59
曲终人散121
努力。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CPU 缓存
原子累加器Striped64的时候,发现有一个“伪共享”的概念参考1 https://blog.youkuaiyun.com/iteye_9421/article/details/82726596原创 2021-05-16 09:21:18 · 104 阅读 · 0 评论 -
java将double型数 toString
double d = 1234567892.50; NumberFormat format = NumberFormat.getInstance(); format.setMinimumFractionDigits(7); String s= format.format(d); System.out.println(s);Double整数部分超6位用科学计数法表示。double 与BigDecimal 需要额外精度,查过8会使用科学计算法。1,234,567...原创 2021-05-05 21:39:39 · 455 阅读 · 0 评论 -
ZGC、Shenandoah与Oracle GraalVM
1 ZGC、2 Shenandoah3 Oracle GraalVM原创 2020-12-01 00:42:45 · 1225 阅读 · 0 评论 -
volatile、final和synchronized
0 内存内存屏障(memory barrier)是一个CPU指令。基本上,它是这样一条指令: a) 确保一些特定操作执行的顺序; b) 影响一些数据的可见性(可能是某些指令执行后的结果)0.1 Java内存屏障主Java内存屏障主要有Load和Store两类。对Load Barrier来说,在读指令前插入读屏障,可以让高速缓存中的数据失效,重新从主内存加载数据对Store Barrier来说,在写指令之后插入写屏障,能让写入缓存的最新数据写回到主内存1 LoadLoad 屏障序列:Load1,原创 2021-04-16 01:49:51 · 266 阅读 · 0 评论 -
java 异常处理
1 方法覆盖这种情况下三个原则:1、子类重写父类方法要抛出与父类一致的异常,或者不抛出异常2、子类重写父类方法所抛出的异常不能超过父类的范畴(仅指检查型异常)备注:子类重写的方法可以抛出任何运行期异常3、子类在重写父类的具有异常声明的方法的同时,又去实现了具有相同方法名称的接口且该接口中的方法也具有异常声明,则子类中的重写的方法,要么不抛出异常,要么抛出父类中方法声明异常与接口中方法声明的异常的交集。2 线程处理异常2.1 unchecked exception 对于这种unchecked原创 2021-02-22 03:56:31 · 245 阅读 · 0 评论 -
BlockingQueue--3 PriorityBlockingQueue
1 如果数组长度小于64,直接扩容1倍2 否则扩容0.5倍3 默认容量为114 无界阻塞队列,最大Integer.MAX_VALUE - 8原创 2020-12-01 00:38:09 · 110 阅读 · 0 评论 -
ConcurrentSkipListMap与ConcurrentSkipListSet
ConcurrentSkipListSet使用ConcurrentSkipListMap实现,只关注ConcurrentSkipListMap原创 2020-11-29 23:17:56 · 163 阅读 · 0 评论 -
BlockingQueue--3 ArrayBlockingQueue
线程安全,有界,支持公平和非公平锁,ArrayBlockingQueue 使用场景。先进先出队列(队列头的是最先进队的元素;队列尾的是最后进队的元素)有界队列(即初始化时指定的容量,就是队列最大的容量,不会出现扩容,容量满,则阻塞进队操作;容量空,则阻塞出队操作)队列不支持空元素...原创 2020-11-29 23:16:21 · 108 阅读 · 0 评论 -
BlockingQueue--2 LinkedBlockingQueue
有界,默认为Integer.MAX_VALUE 它如果不指定容量,默认为Integer.MAX_VALUE,也就是无界队列。1 组成构造方法 public LinkedBlockingQueue() { this(Integer.MAX_VALUE); } public LinkedBlockingQueue(int capacity) { if (capacity <= 0) throw new IllegalArgumentExceptio原创 2020-11-29 22:48:57 · 128 阅读 · 2 评论 -
BlockingQueue--1概述
1 组成1.1 添加元素add 在添加元素的时候,若超出了度列的长度会直接抛出异常:offer(E e):如果队列没满,立即返回true; 如果队列满了,立即返回false–>不阻塞put(E e):如果队列满了,一直阻塞,直到队列不满了或者线程被中断–>阻塞offer(E e, long timeout, TimeUnit unit):在队尾插入一个元素,,如果队列已满,则进入等待,直到出现以下三种情况:–>阻塞被唤醒等待时间超时当前线程被中断1.2 取出元素re原创 2020-11-29 22:15:06 · 229 阅读 · 1 评论 -
java 8 Lambda表达式原理
Lambda并不是采用内部类的实现方式实现的。如果Lambda表达式使用内部类的方式,将是极为不利的。类加载需要有加载、验证、准备、解析、初始化等过程,大量的内部类将会影响应用执行的性能,并消耗Met...原创 2020-11-24 01:19:46 · 697 阅读 · 0 评论 -
线程池体系(一)--总体概述
1 Executor线程池顶级接口,只定义了一个执行无返回值任务的方法。public interface Executor { // 执行无返回值任务【本篇文章由公众号“彤哥读源码”原创】 void execute(Runnable command);}2 ExecutorService线程池次级接口,对Executor做了一些扩展,主要增加了关闭线程池、执行有返回值任务、批量执行任务的方法。public interface ExecutorService extends E.原创 2020-11-20 01:25:32 · 115 阅读 · 0 评论 -
Semaphore
Semaphore public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) : new NonfairSync(permits); } /** * NonFair version原创 2020-11-20 01:19:37 · 81 阅读 · 0 评论 -
CyclicBarrier
CyclicBarrier基于ReenTrantLock//Generation,该类的对象代表栅栏的当前代,就像玩游戏时代表的本局游戏,利用它可以实现循环等待。barrierCommand表示换代前执行的任务,当count减为0时表示本局游戏结束,需要转到下一局。在转到下一局游戏之前会将所有阻塞的线程唤醒,在唤醒所有线程之前你可以通过指定barrierCommand来执行自己的任务..private static class Generation { boolean broken =原创 2020-11-20 01:14:15 · 114 阅读 · 0 评论 -
CountDownLatch
CountDownLatch中只包含了Sync一个内部类,它没有公平/非公平。基于AQS主要使用shared类型的节点。1 组成只有一个重要的成员 private final Sync sync; public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(cou原创 2020-11-20 00:58:55 · 237 阅读 · 0 评论 -
ReentrantReadWriteLock
ReadWriteLock是一个读写锁接口,ReentrantReadWriteLock是ReadWriteLock接口的一个具体实现,实现了读写的分离, 读锁是共享的,写锁是独占的,读和读之间不会互斥,读和写、写和读、写和写之间才会互斥,提升了读写的性能。同步状态的高16位用来表示读锁被获取的次数 ,低16位为写锁状态。2 组成读写锁公用一个 sync对象 public ReentrantReadWriteLock(boolean fair) { sync = fair ?原创 2020-11-16 04:27:06 · 213 阅读 · 0 评论 -
Unsafe
这个类是属于sun.* API中的类,并且它不是J2SE中真正的一部份,因此你可能找不到任何的官方文档,更可悲的是,它也没有比较好的代码文档。1方法分类Unsafe API的大部分方法都是native实现,它由105个方法组成,主要包括以下几类:1 Info相关。主要返回某些低级别的内存信息:addressSize(), pageSize()2 Objects相关。主要提供Object和它的域操纵方法:allocateInstance(),objectFieldOffset()3 Class相关原创 2020-11-16 03:44:31 · 261 阅读 · 0 评论 -
AQS
AQS则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底层的实现处理。AQS的核心也包括了这些方面:同步队列,独占式锁的获取和释放,共享锁的获取和释放以及可中断锁,超时等待锁获取这些特性的实现独占式锁:void acquire(int arg):独占式获取同步状态,如果获取失败则插入同步队列进行等待; void acquireInterruptibly(int arg):与acquire方法相同,但在同步队列中进行等待的时候可以检测中断; boolean tryAcquireNan原创 2020-11-15 17:33:42 · 198 阅读 · 0 评论 -
java线程安全的集合
一、早期线程安全的集合我们先从早期的线程安全的集合说起,它们是Vector和HashTable1.VectorVector和ArrayList类似,是长度可变的数组,与ArrayList不同的是,Vector是线程安全的,它给几乎所有的public方法都加上了synchronized关键字。由于加锁导致性能降低,在不需要并发访问同一对象时,这种强制性的同步机制就显得多余,所以现在Vector已被弃用2.HashTableHashTable和HashMap类似,不同点是HashTable是线程安全的原创 2020-11-15 02:23:32 · 1189 阅读 · 0 评论 -
ThreadLocal
ThreadLocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定。类似 Map 的结构存储变量。每个Thread里面都有一个ThreadLocal.ThreadLocalMap成员变量,也就是说每个线程通过ThreadLocal.ThreadLocalMap与ThreadLocal相绑定。1 ThreadLocal//获取值public T get() { Th原创 2020-11-15 02:03:12 · 372 阅读 · 0 评论 -
线程池体系(二)-- ForkJoinPool
ForkJoinPool主要组成:1)ForkJoinPool:是forkjoin框架里面的管理者,最原始的任务都要交给它才能处理。它负责控制整个forkjoin有多少个workerThread,workerThread的创建,激活都是由它来掌控。它还负责workQueue队列的创建和分配,每当创建一个workerThread,它负责分配相应的workQueue。然后它把接到的活都交给workerThread去处理,它可以说是整个forkjoin的容器。2)ForkJoinWorkerThread:fo原创 2020-11-11 22:56:38 · 1163 阅读 · 2 评论 -
StampedLock实现原理
一1 基于CLH锁->一种自旋锁,保证没有饥饿发生,FIFO顺序【先进先出】2 维护一个线程队列,申请不成功的记录在此,每个节点保存一个标记位【locked】,用来判断当前线程是否释放锁3 当线程试图获取锁,取得当前队列的尾部节点作为其前序节点,并使用类似while(pred.locked){}判断前序节点是否已经成功释放锁4 只要前序节点没有释放锁,则表示当前线程还不能继续执行,自旋等待。5 如果前序线程已经释放,则当前线程可以继续执行6 释放锁时线程将自己的节点标记位置为false,那原创 2020-11-10 00:41:39 · 563 阅读 · 0 评论 -
NIO--buffer
12 ByteBuffer转化B,代表大端L,代表小端RB,代表只读大端RL代表只读小端原创 2020-11-01 21:13:33 · 235 阅读 · 0 评论 -
NIO--Channel
通常来说NIO中的所有IO都是从 Channel(通道) 开始的。从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。从通道进行数据写入 :创建一个缓冲区,填充数据,并要求通道写入数据。...原创 2020-11-01 23:26:04 · 256 阅读 · 0 评论 -
NIO--Selector
1 Selector选择器(Selector):选择器类管理着一个被注册的通道集合的信息和它们的就绪状态。通道是和选择器一起被注册的,并且使用选择器来更新通道的就绪状态。可选择通道(SelectorChannel):这个抽象类提供了实现通道的可选择性所需要的公共方法。SelectableChannel可以被注册到Selector对象上,同时可以指定对那个选择器而言,那种操作是感兴趣的。所有socket通道都是可选择的。选择键(SelectionKey):选择键封装了特定的通道与特定的选择器的注原创 2020-11-01 23:07:05 · 132 阅读 · 0 评论 -
java io
https://blog.youkuaiyun.com/luming_xml/article/details/51362528原创 2020-03-25 00:27:54 · 114 阅读 · 0 评论 -
java安全模型
参考:https://www.jianshu.com/p/0ce92da36eba深入java虚拟机原创 2019-12-26 00:23:17 · 188 阅读 · 0 评论 -
java内存模型
参考:https://www.jianshu.com/p/a79b3174c2fb原创 2019-12-24 00:02:26 · 117 阅读 · 0 评论 -
JCP与JSR
JCP:Java Community Process成立于1998年,是一套制定java规范标准的机制。通过制定JSR 推动java发展JSR: Java Specification RequestJSR非orale公司来管理,任何组织和个人都可以注册JCP成为成员,参与提议。JCP与JSRJCP使用JSR(Java规范请求,Java Specification Requests)作为正...原创 2019-12-23 00:24:33 · 693 阅读 · 0 评论 -
java对象模型
java对象由 对象头、实例数据和对齐填充组成。Hotspot实现的jvm,没有采取一个java对象对应一个C++对象实现。1.OOP-Klass模型参考:https://www.cnblogs.com/qingshanli/p/9250491.htmhttps://blog.youkuaiyun.com/w372426096/article/details/81167669...原创 2019-12-23 00:13:42 · 151 阅读 · 0 评论 -
jvm调优
2.1 查看默认jvm参数查看jvm默认参数:java -XX:+PrintFlagsInitial -flagsC:\Program Files\Java\jdk1.8.0_181\bin>java -XX:+PrintFlagsInitial -flags 11776[Global flags] uintx AdaptiveSizeDecrementScaleFactor...原创 2019-12-10 23:00:24 · 262 阅读 · 0 评论 -
javac命令
参考https://www.iteye.com/blog/wb8206656-2231594原创 2019-12-09 01:31:16 · 714 阅读 · 0 评论 -
JDK调优工具
一、JDK 监控工具1.1 jps显示指定系统内的所有HotSpot进程1.2 jstat用于收集HotSpot个方面的运行数据1.3 jinfo显示jvm配置信息1.4参考https://www.cnblogs.com/timlearn/p/4088626.htmlhttps://www.cnblogs.com/wxisme/p/9878494.html...原创 2019-12-09 01:29:19 · 857 阅读 · 0 评论 -
java类加载机制
1.类加载的时机。还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。jvm规范有且只有5种场景类才会被加载:new 。用的类的静态成员变量时(被final修饰、已在编译期把结果放在常量池的静态字段除外)。调用一个类的静态方法...原创 2019-12-04 00:58:05 · 164 阅读 · 0 评论 -
JAVA的class文件
jvm规范规定,Class文件采取一种类似C语言结构体的伪结构来存储数据,这种数据结构只有两种数据类型:无符号数和表。无符号数参考https://www.jianshu.com/p/247e2475fc3a周志明,深入理解Java虚拟机:JVM高级特性与最佳实践,机械工业出版社...原创 2019-12-07 18:20:07 · 277 阅读 · 0 评论 -
java中的隐藏和覆盖
1. JAVA中方法和变量在继承时的覆盖和隐藏规则1.父类的实例变量和静态变量能被子类的同名变量隐藏2.父类的静态方法被子类的同名静态方法隐藏3.父类的实例方法被子类的同名实例变量覆盖2.注意事项:1.不能用子类的静态方法隐藏 父类中同样标示(也就是返回值 名字 参数都一样)的实例方法2.不能用子类的实例方法覆盖 父类中同样标示的静态方法3.这点儿请注意,就是变量只会被隐藏 不会被覆...原创 2019-11-12 01:28:22 · 298 阅读 · 0 评论 -
jdk源码
sun公司的jdk没有开源。只能读开源版的OpenJDK方法一:(网络影响,下载下来的损坏 只能解压出来一部分) 下载OpenJDK:官网:http://hg.openjdk.java.net/具体可以参考:https://my.oschina.net/u/2518341/blog/1931088方法二:迅雷直接粘贴此链接:http://download.java.net/...原创 2019-08-27 01:47:55 · 258 阅读 · 0 评论 -
Java中的向上转型和向下转型
原文地址:http://blog.youkuaiyun.com/yangquanhui1991/article/details/49685831转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转转载 2016-11-13 18:58:46 · 1519 阅读 · 0 评论 -
java多线程面试题
转自:http://blog.youkuaiyun.com/caohaicheng/article/details/380710971、多线程有哪几种实现方法?举个例子说明下线程的同步。(1)Java多线程有两种实现方式:继承Thread类和实现Runnable接口,Thread就是实现了Runnable接口。两个最简单的线程例子:[java] view plainco转载 2016-11-12 09:07:36 · 275 阅读 · 0 评论