![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 53
givemefive_001
这个作者很懒,什么都没留下…
展开
-
Java对象结构
1. Java对象结构:1.1 Java对象实例:对象头:markwordklass对象实际数据:InstanceData对齐填充:-padding1.2 Java数组实例:对象头:markwordklasslength对象实际数据:ArrayData对齐填充:-padding解释:markword:用于存储对象自身的运行时数据,如哈希码(hashcode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。32位、原创 2021-03-19 11:02:52 · 254 阅读 · 0 评论 -
Java String的不可变性
String为什么设计成final:不可变:由于字符串的内容存储在一个char[]数组中,这个数组的引用是final类型,但是仅仅引用是final类型也不能限制数组内容的改变。因此String的不可变性是内部实现中并没有去修改这个数组的内容。为了不让这个数组的内容修改,做了一下几点:1. final修饰类:不可被继承;2. 内部实现没有对数组内容进行修改;不可变的好处:安全!1.键值的唯一性:如HashSet使用String作为key值时,如果这个String是可变的,那么HashSet键值的原创 2021-03-17 15:28:11 · 128 阅读 · 0 评论 -
数据结构之ArrayMap、SparseArray
ArrayMap<Key, Value>:内有两个数组:1.mHashes:记录key的hash值,索引是index;2.mArray:记录key和value值,key的索引是 2 * index,value的索引是2 * index + 1;插入和删除:1.先计算出key的hash值,找到对应的mHashes的索引index,然后比较mArray中的2 * index处的key,如果相等,则返回该索引,如果不相等,则依次遍历后续的key值,直到相等为止;2.如果是插入,则使用Sys原创 2021-03-15 17:01:05 · 164 阅读 · 0 评论 -
LongAdder
AtomicLong和LongAdder:为什么要引入LongAdder:AtomicLong底层是采用CAS,在高并发下,会出现大量失败并不断自旋,这比较耗性能。LongAdder就是为了解决这个问题。LongAdder原理:比如有三个ThreadA、ThreadB、ThreadC,每个线程对value增加10。对于AtomicLong,最终结果的计算始终是下面这个形式:value=10+10+10=30。多个线程执行累加时,都是串行进行的。但是对于LongAdder来说,内部有一个base变原创 2021-03-15 11:56:36 · 114 阅读 · 1 评论 -
LinkedHashMap摘要
LinkedHashMap:HashMap和双向链表合二为一即是LinkedHashMap。结构:继承自HashMap,因此HashMap的设计的初衷:HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便。LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。因此,根据链表中元素的顺序可以将Linked原创 2021-03-10 09:59:40 · 60 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap的设计和原理:设计:先说一下HashMap和HashTable这两种数据结构都是数组+链表;HashMap允许多个线程同时进行存取,但是不能保证因为多线程的原因导致获取的数据不是想要的;HashTable存取都加上了Synchronized,因此只能允许同时一个线程进行存取,但是存取的数据都是想要的。为了解决HashMap和HashTable的问题,设计了ConcurrentHashMap,它同时允许多个线程同时进行存取,并且存取的数据都是想要的。Java原创 2021-02-23 22:35:54 · 411 阅读 · 1 评论 -
ClassLoader小知识
JVM由4大部分组成:ClassLoader,Runtime Data Area,Execution Engine,Native Interface。栈帧包含三类信息:局部变量,执行环境,操作数栈。对比java的基本数据类型,jvm的规范中没有boolean类型。这是因为jvm中堆boolean的操作是通过int类型来进行处理的,而boolean数组则是通过byte数组来进行处理。通过查阅jvm指令集和其对应的数据类型的关系发现,大部分的指令都没有支持整数类型byte、char和short,甚至没有任原创 2021-01-15 16:02:49 · 148 阅读 · 0 评论 -
线程池简单介绍
线程池:(1)FixedThreadPool:可重用固定线程数的线程池- 固定线程池,那么corePoolSize和maximumPoolSize是相同大小;- keepAliveTime为0,表示空闲线程会立刻终止;- 采用无界阻塞队列LinkedBlockingQueue,大小为Integer.MAX_VALUE,因此只有在线程池shutdown()或shutdownNow()后才会拒绝任务。(2)SingleThreadExecutor:单个Worker线程的Executor- 线程数原创 2020-07-02 17:57:54 · 155 阅读 · 0 评论 -
Java并发包——并发工具
Java并发工具:知识点:Thread.join()是通过Object.wait()来实现的,Thread.join(millis)是通过Object,wait(millis)来实现的。当线程执行完后,由JVM调用Thread.unpark$()方法->Object.notifyAll()。(1)CountDownLatch(计数器):相当于一个计数器,它的构造函数会传入一个int值作为初始计数值。但是这个计数器是一次性的,不可重复使用。- await():线程调用该方法,相当于这个线程需原创 2020-07-01 15:20:52 · 237 阅读 · 0 评论 -
MESI缓存一致性协议详解
在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。比如循环、递归、方法的反复调用等。空间局部性(Spatial Locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。比如顺序执行的代码、...原创 2020-03-28 10:15:40 · 652 阅读 · 0 评论 -
Java知识点复习
1.枚举的高级应用:枚举类型实际上会被Java编译器转换为一个对应的类,这个类继承了Java API中的java.lang.Enum类。public enum Size { SMALL, MEDIUM, LARGE}会编译出大致的类:public final class Size extends Enum<Size> { public static...原创 2019-09-02 23:46:08 · 102 阅读 · 0 评论 -
设计模式 —— 代理模式
一.定义代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。UML:二.作用中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 开闭原则...原创 2019-08-21 15:56:09 · 75 阅读 · 0 评论 -
慎用枚举类型
在阿里规范里面,枚举可以作为参数类型,而且这样做是很安全的。但是不能作为返回类型,因为在升级后,可能引起异常。由于升级原因,导致双方的枚举类不尽相同,在接口解析,类反序列化时出现异常。Java中出现的任何元素,在Gosling的角度都会有背后的思考和逻辑(尽管并非绝对完美,但Java的顶层抽象已经是天才级了),比如:接口、抽象类、注解、和本文提到的枚举。枚举有好处,类型安全,清晰直接,还可...原创 2019-08-06 13:18:24 · 982 阅读 · 0 评论 -
设计模式 —— 原型模式
预备知识:浅拷贝和深拷贝:浅拷贝:被复制对象的所有属性的值都与原来对象的相同,而所有的对象引用属性仍然指向原来的对象得属性引用,这种拷贝是危险的。String类比较特殊,它不存在clone函数,管理是通过常量池管理,因此浅拷贝对其无影响。浅拷贝对可变的(非final)基本数据类型无影响;深拷贝:① 如果有一个非原生成员(基本数据类型和String),如自定义对象的成员,那么就需要:...原创 2019-07-19 17:46:26 · 91 阅读 · 0 评论 -
设计模式 —— 工厂模式
工厂模式:预备知识:·单一职责原则:两个类A和B,A与B的关系有两种:1.A创建B;2.A使用B。工厂模式是为了让A和B的关系只能是其中一种,而不能两种关系都有。将对象的创建和使用分离,也使得系统更加符合“单一职责原则”,有利于对功能的复用和系统的维护;·开放—封闭原则:开放封闭原则主要体现在两个方面:对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。...原创 2019-07-12 15:54:30 · 116 阅读 · 0 评论 -
Java好用的API
1.class1.isAssignableFrom(class2)判定此Class对象所表示的类或接口与指定的Class参数所表示的类或接口是否相同,或是否是其超类或超接口。class2是不是class1的子类或者子接口。...原创 2019-07-01 10:25:13 · 263 阅读 · 0 评论 -
【Java并发专题】27篇文章详细总结Java并发基础知识
https://github.com/CL0610/Java-concurrency转载 2019-05-14 14:49:22 · 97 阅读 · 0 评论