自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 底层源码分析-HashMap源码详解

并发编程-HashMap源码详解HashMap域HashMap重要方法put(K key, V value)treeifyBin(NodeHashMap域DEFAULT_INITIAL_CAPACITY = 1 << 4; Hash表默认初始容量MAXIMUM_CAPACITY = 1 << 30; 最大Hash表容量DEFAULT_LOAD_FACTOR = 0.75f;默认加载因子TREEIFY_THRESHOLD = 8;链表转红黑树阈值UNTREEIFY_THRE

2021-01-29 19:31:36 81

原创 并发编程-Atomic和Unsafe详解

并发编程-Atomic和Unsafe详解原子操作相关术语处理器如何实现原子操作处理器自动保证基本内存操作的原子性使用总线锁保证原子性使用缓存锁保证原子性Unsafe 使用解析Unsafe对象生成Unsafe功能介绍CAS相关Atomic使用原子更新基本类型类原子更新数组类原子更新引用类型原子更新字段类原子操作原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊

2021-01-29 13:42:37 137

原创 并发编程-AQS应用类实现原理

并发编程-AQS应用类实现原理CountDownLatch重要函数CyclicBarrier应用场景CyclicBarrier 和 CountDownLatch的区别SemaphoreCountDownLatchCountDownLatch 允许一个或者多个线程等待其他线程完成操作。重要函数countDown()public void countDown() {//会调用 tryReleaseShared() sync.releaseShared(1); } pu

2021-01-29 00:04:01 184

原创 并发编程-阻塞队列BlockingQueue详解

并发编程-阻塞队列BlockingQueue详解概要队列数据结构常见的4种阻塞队列三级目录概要BlockingQueue,是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作,并且BlockingQueue提供了超时return null的机制,在许多生产场景里都可以看到这个工具的身影。队列数据结构队列实质就是一种存储数据的结构通常用链表或者数组实现一般而言队列具备FIFO先进先出的特

2021-01-28 13:42:05 355

原创 并发编程-AQS详解

并发编程-AQS详解解析:AbstractQueuedSynchronizer同步等待队列(CLH)获取锁的函数释放锁的函数条件等待队列等待函数唤醒函数解析:AbstractQueuedSynchronizer同步等待队列(CLH)AQS当中的同步等待队列也称CLH队列,CLH队列是Craig、Landin、Hagersten三人发明的一种基于双向链表数据结构的队列,是FIFO先入先出线程等待队列,Java中的CLH队列是原CLH队列的一个变种,线程由原自旋机制改为阻塞机制。head 指向的是一个

2021-01-28 13:19:02 679

原创 并发编程-AQS应用Lock详解

并发编程-AQS应用Lock详解ReentrantLock源码解析Lock()源码解析unLock()ReentrantLockReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁 可以保证线程安全。而且它具有比synchronized更多的特性,比如它支持手动加锁与解锁,支持加锁的公平性。AQS具备特性阻塞等待队列共享/独占公平/非公平可重入允许中断AQS内部维护属性volatile

2021-01-27 02:42:10 236

原创 并发编程-synchronized详解

并发编程-synchronized详解synchronized原理详解Monitor监视器锁对象的内存布局锁的膨胀升级过程(JDK1.5后的优化)二级目录三级目录synchronized原理详解synchronized底层原理synchronized是基于JVM 内置锁实现,通过 内部对象Monitor(监视器锁)实现,基于进入与退出Monitor对象实现方法与代码块同步,监视器锁的实现依赖底层操作系统的Mutex lock(互斥锁)实现,它是一个重量级锁性能较低。当然,JVM内置锁在1.5之后版

2021-01-27 00:46:56 344

原创 CPU缓存一致性协议MESI

CPU缓存一致性协议MESIjava代码执行流程硬件缓存锁定机制MESIMESI协议缓存状态MESI状态转换多核缓存协同操作单核读取双核读取修改数据同步数据缓存行伪共享MESI优化和他们引入的问题CPU切换状态阻塞解决­存储缓存(Store Bufferes)Store BufferesStore Bufferes的风险硬件内存模型失效队列内存屏障java代码执行流程一个java类通过javac编译成字节码文件后会通过类加载子系统装载进元空间在堆中生成Class实例创建线程要执行的方法的字节码会

2021-01-26 22:19:27 521

原创 并发编程-JMM模型

并发编程-JMM模型什么是JMM模型主内存工作内存JMM的必要性数据同步的八大原子操作同步规则分析并发编程的可见性,原子性与有序性问题JMM如何解决原子性&可见性&有序性问题什么是JMM模型Java内存模型(Java Memory Model简称JMM)**是一种抽象的概念,**并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地

2021-01-26 00:03:19 212

原创 操作系统底层工作的整体认识

操作系统底层工作的整体认识冯诺依曼计算机模型详解计算机五大核心组成部分CPU指令CPU缓存结构操作系统内存管理执行空间保护进程与线程进程线程冯诺依曼计算机模型详解现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令(机器码)的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。程序与数据一样存贮,按程序编排的顺序,一步一步地

2021-01-25 22:58:22 172

原创 JVM-调优工具详解及调优实战

JVM-调优工具详解及调优实战调优工具jpsjmapjstackjinfojstatJVM运行情况预估实战:解决Full GC卡顿的思路调优工具jps查看正在运行java的进程jmapjmap -histo 30340 #查看历史生成的实例jmap -histo:live 30340 #查看当前存活的实例,执行过程中可能会触发一次full gcnum:序号instances:实例数量bytes:占用空间大小class name:类名称,[C is a char[],[S i

2021-01-25 02:04:26 444

原创 JVM-HSDB使用

这里写目录标题调用HSDB二级目录三级目录调用HSDBsudo java -cp /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/lib/sa-jdi.jar sun.jvm.hotspot.HSDB二级目录三级目录

2021-01-24 23:08:08 338

原创 JVM-执行引擎

JVM-执行引擎执行引擎概述执行引擎位置执行引擎是什么执行引擎工作过程Java 代码编译和执行过程解释执行和即时编译解释器和编译器JIT 编译器结论编译对象与触发条件热点探测技术方法调用计数器热度衰减回边计数器C1 C2 编译器比较分层编译策略总结Graal 编译器执行引擎概述执行引擎位置执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器执行引擎是什么执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机

2021-01-24 22:47:28 399

原创 Netty-线程模型

Netty-线程模型前言Reactor线程模型(Nio的多路复用+线程池)单线程模型多线程模型主从多线程模型Netty 的主从多线程模型前言想要了解Netty之前,我们需要先去了解一下Nio的运行机制。在使用Netty进行服务端开发的时候,我们通常会设置下面的代码:EventLoopGroup bossGroup = new NioEventLoopGroup(1);EventLoopGroup workerGroup = new NioEventLoopGroup(2);下面就从线程模型方面去

2021-01-24 22:42:56 183

原创 JVM-G1垃圾收集器

JVM-G1垃圾收集器和ZGC收集器G1收集器(-XX:+UseG1GC)Region 分区G1 过程Young GCMixed GC特点G1的垃圾回收分类参数设置优化建议G1收集器(-XX:+UseG1GC)G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.Region 分区G1将Java堆划分为多个大小相等的独立区域(Region),JVM目标是不超过2048个Region

2021-01-24 11:02:41 120

原创 JVM-垃圾收集器

JVM-垃圾收集器对象内存分配对象优先Eden区分配大对象直接进入老年代空间担保垃圾回收器评估 GC 的性能指标HotSpot的算法细节实现跟节点枚举安全点安全区记忆集与卡表写屏障并发的可达性分析Serial 回收器(单线程)PaeNew 回收器Parallel 回收器:吞吐量优先CMS 回收器:低延迟如何选择垃圾回收器G1 回收器:区域化分代式简介Region算法介绍对象内存分配对象优先Eden区分配大多情况下,对象在新生代Eden区分配(如果没有足够空间进行分配,将发起Minor GC)Mi

2021-01-24 11:02:03 200

原创 JVM-垃圾回收

JVM-垃圾回收什么是垃圾Java 垃圾回收机制GC 的作用域垃圾回收算法什么是垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出Java 垃圾回收机制自动内存管理的优点自动内存管理,无需开发人员手动参与内存的分配与回收,这样降低内存泄漏和内存溢出的风险没有垃圾回收器,java也会和cpp一样,各种悬

2021-01-22 13:35:17 131

原创 JVM-对象的实例化内存布局与访问定位

JVM-对象的实例化内存布局与访问定位对象实例化对象创建的方式对象的创建步骤对象的内存布局对象头实例数据对齐填充对象的访问定位直接内存概述直接内存与 OOM对象实例化对象创建的方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 publicConstructor的newInstance(Xxxx):反射的方式,可以调用空参的,或者

2021-01-19 21:34:52 325

原创 JVM-堆

JVM-堆堆的核心概述内存细分年轻代和老年代对象分配空间TLAB堆空间中常用的参数空间分配担保对象不一定都在堆上逃逸分析栈上分配同步省略分离对象总结堆小结堆的核心概述一个JVM实例只存在一个堆内存。在JVM启动的时候就已经创建了,也确定了空间大小,可以利用-Xms 和-Xmx设置最大最小空间,通常设置一样,目的是能够在GC后不需要重新分隔计算堆区的大小对可以处于物理上不连续但是逻辑上是连续的。所有线程共享一个堆,在这里可以划分线程私有的缓冲区TLAB。内存细分Jdk8 之后堆的逻辑上分为三

2021-01-19 10:17:46 124

原创 JVM-方法区

0 new #3 <java/lang/StringBuilder>3 dup4 invokespecial #4 <java/lang/StringBuilder.>7 ldc #5 <12>9 invokevirtual #6 <java/lang/StringBuilder.append>12 new #7 <java/lang/String>15 dup16 ldc #8 <3>18 invokespecial

2021-01-19 10:17:10 115

原创 JVM-虚拟机栈

字节码执行引擎运行时栈帧结构局部变量表操作数栈动态连接方法返回值方法调用解析运行时栈帧结构栈帧用于存放局部变量表 ,操作数栈,动态链接,方法出口。每一个方法被调用到执行完毕的过程,就对应着一个栈帧进栈到出栈的过程。执行引擎所运行的所有字节码指令都只针对当前栈帧(栈顶)操作。局部变量表局部变量表是一组变量值的存储空间,用来存放方法参数和方法内定义的局部变量。局部变量表的容量以变量槽为最小单位,分配规则:如果是实例方法,那么0 index 存的是this其余参数安装顺序依次分配根据方法体内部定义

2021-01-18 15:06:08 240

原创 深入理解NIO与Epoll

深入理解NIO与EpollIO模型BIO (Blocking IO)NIO(Non Blocking IO)IO模型IO模型就是说用什么样的通道进行数据的发送和接收,Java一共支持3种网络编程IO模式:BIO和NIO,AIO。BIO (Blocking IO)这个是同步阻塞的模型,一个客户端只能链接对应处理一个线程。代码示例:package com.atzxm.bio;/** * @author zhouximin * @create 2021-01-17-下午7:13 */imp

2021-01-18 02:40:00 871 3

原创 聊聊jvm中的String

聊聊jvm中的String常量池三种常量池实验拼接字符串底层是如何实现的常量池三种常量池Class文件中的常量池:Constant pool中运行时常量池:是在类加载器将Class文件中的常量池解析后存放在方法区中的InstanceKlass类下的ConstantPool* _constants中。字符串常量池:这是堆下的一个数据结构 String Pool,由底层HashTable实现的,一个 key-value的存储形式通过String的内容+长度生成Hash值。将Hash转为keyV

2021-01-16 02:53:57 140

原创 jvm-java内存区域

jvm-java内存区域jvm内存模型运行时数据区域HotSpot虚拟机对象jvm内存模型运行时数据区域程序计数器它是一块较小的内存空间,它可以看作是当前线程所执行的字节码行号指示器。(线程私有的)java虚拟机栈线程私有虚拟机栈是描述java方法执行的线程内存模型,每一个方法被执行的时候,java虚拟机都会创建一个栈帧用于存放局部变量表 ,操作数栈,动态链接,方法出口。每一个方法被调用到执行完毕的过程,就对应着一个栈帧进栈到出栈的过程。本地方法栈作用和java虚拟机栈类似,只是服务于

2021-01-14 18:39:16 190

原创 JVM-Class文件解析

JVM-Class文件解析Class类文件的结构魔数,版本号常量池大小,常量池访问标志类名 父类名,接口数字段表集合方法表集合Class类文件的结构了解class类文件的必要性(了解class文件,可以了解很多在jvm上运行的语言)Class文件格式* 被解析的java文件和class文件。public class Test { private int n; int inc() { n = n+1; return n; }}ca

2021-01-14 02:04:34 230 1

原创 JVM-类加载器

JVM-类加载器类与类加载器双亲委派模型三层类加载器双亲委派模型工作过程破坏双亲委派沙箱安全类与类加载器类加载器是用来加载类的,对于任意一个类,都必须由类和加载他的类加载器来确定它的唯一性。对于每一个类加载器,都有其独立的类名称空间。也就是说,要表明两个类是否一样的前提是是否由同一个类加载器加载。双亲委派模型在虚拟机的角度上看,只有两种不同的类加载器。一种是c++实现的,另一种是java 实现的,独立于jvm 全部继承java.lang.ClassLoader.在java开发人员的角度上看,是保持

2021-01-13 12:00:48 408 1

原创 JVM-底层之类加载

JVM-底层之类加载Klass 模型类的加载过程加载验证准备解析初始化Klass 模型klass模型类的继承结构由上面图可以看出:类的元信息是储存在原5空间里面的在JVM中,普通类对应的是instanceKlass类的实例。InstanceMirrorKlass:用于表示java .lang.Class,java 代码中获取到Class对象,实际上就是这个C++ 类的实例。储存在堆区。InstanceRefKlass:用于表示java/lang/ref/Reference类的子类Insta

2021-01-12 12:48:36 220

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除