随笔 - 171  文章 - 0  评论 - 0  阅读 - 62466

随笔分类 -  Java

上一页 1 2 3 下一页
Happens-Before原则
摘要:Happens-Before 程序顺序原则:如果程序操作 A 在操作 B 之前,那么多线程中的操作依然是 A 在 B 之前执行。 监视器锁原则:在监视器锁上的解锁操作必须在同一个监视器上的加锁操作之前执行。 volatile 变量原则:对 volatile 修饰的变量写入操作必须在该变量的读操作之前 阅读全文
posted @ 2023-03-29 21:52 zhengbiyu 阅读(19) 评论(0) 推荐(0) 编辑
内存模型
摘要:JMM(Java Memory Model,Java 内存模型) JMM 是一个抽象概念,由于 CPU 多核多级缓存、为了优化代码会发生指令重排的原因,JMM 为了屏蔽细节,定义了一套规范,保证最终的并发安全。它抽象出了工作内存与主内存的概念,并且通过八个原子操作以及内存屏障保证了原子性、内存可见性 阅读全文
posted @ 2023-03-29 21:50 zhengbiyu 阅读(74) 评论(0) 推荐(0) 编辑
double check lock
摘要:双重检查(单例模式) class Singleton{ private volatile static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if(inst 阅读全文
posted @ 2023-03-29 20:14 zhengbiyu 阅读(27) 评论(0) 推荐(0) 编辑
八种原子操作
摘要:为了支持 JMM,Java 定义了 8 种原子操作(Action),用来控制主存与工作内存之间的交互: read 读取:作用于主内存,将共享变量从主内存传动到线程的工作内存中,供后面的 load 动作使用。 load 载入:作用于工作内存,把 read 读取的值放到工作内存中的副本变量中。 stor 阅读全文
posted @ 2023-03-29 20:03 zhengbiyu 阅读(286) 评论(0) 推荐(0) 编辑
三色标记
摘要:在遍历对象图的过程中,把需要遍历的对象按照“是否访问过”分为以下三种颜色。 白色:表示对象尚未被垃圾回收器访问过。显然,在可达性分析刚刚开始的阶段,所有的对象都是白色的,若在分析结束的阶段,仍然是白色的对象,即代表不可达。 黑色:表示对象已经被垃圾回收器访问过,且这个对象的所有引用都已经扫描过。黑色 阅读全文
posted @ 2023-03-29 19:56 zhengbiyu 阅读(97) 评论(0) 推荐(0) 编辑
G1
摘要:G1抛弃了之前的分代收集的方式,面向整个堆内存进行回收,把内存划分为多个大小相等的独立区域Region。 一共有4种Region: 自由分区Free Region 年轻代分区Young Region,年轻代还是会存在Eden和Survivor的区分 老年代分区Old Region 大对象分区Humo 阅读全文
posted @ 2023-03-29 19:54 zhengbiyu 阅读(464) 评论(0) 推荐(0) 编辑
traceId实现
摘要:普通 内部拦截器,threadlocal变量set上下文context。 父子线程传递 InheritableThreadLocal Thread内部为InheritableThreadLocal开辟了一个单独的ThreadLocalMap。在父线程创建一个子线程的时候,会检查这个ThreadLoc 阅读全文
posted @ 2023-03-29 11:53 zhengbiyu 阅读(210) 评论(0) 推荐(0) 编辑
new Object()占用内存
摘要:32位虚拟机和64位虚拟机下的Java对象头内存模型: 本地环境是jdk1.8,64位虚拟机,这里我以64位虚拟机(开启指针压缩)来分析,因为默认情况下,jdk1.8 在64位虚拟机默认开启指针压缩。 Java 对象头主要包括两部分,第一部分就是 Mark Word,这也是 Java 锁实现原理中重 阅读全文
posted @ 2023-03-25 15:46 zhengbiyu 阅读(29) 评论(0) 推荐(0) 编辑
JVM内存分布
摘要:JVM内存分布图 执行字节码的模块叫做执行引擎,执行引擎依靠程序计数器恢复线程切换。本地内存包含元数据区域以及一些直接内存。 程序计数器(Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行字节码的行号指示器,指向下一个将要执行的指令代码,由执行引擎来读 阅读全文
posted @ 2023-03-19 23:35 zhengbiyu 阅读(98) 评论(0) 推荐(0) 编辑
对象访问方式
摘要:Object objectRef = new Object(); 假设这句代码出现在方法体中,Object objectRef这部分将会反映到Java栈的本地变量中,作为一个reference类型数据出现。而new Object()这部分将会反映到Java堆中,形成一块存储Object类型所有实例数 阅读全文
posted @ 2023-03-19 23:16 zhengbiyu 阅读(26) 评论(0) 推荐(0) 编辑
项目启动时CPU高
摘要:在发布或重启某线上某服务时,常常发现有些机器的load会飙到非常高(高达70),并持续较长一段时间(5分钟)后回落,与此同时响应时间曲线也与load曲线一致。注:load飙高的初始时刻是应用服务端口打开,流量打入时(load)。 发布时候load飙高 发布时候响应时间飙高 cpu使用率较高的两个线程 阅读全文
posted @ 2023-03-19 20:48 zhengbiyu 阅读(272) 评论(0) 推荐(0) 编辑
类加载器
摘要:创建bootstrapClassLoader,创建启动器Launcher。 父子加载器的类关系不是继承关系,子加载器通过parent变量引用父加载器。 为什么类加载的顺序不是从引导类加载器先加载,而是从应用类加载器加载? 因为只有AppClassLoader会检查类是否已被加载过。因为项目中大部分代 阅读全文
posted @ 2023-03-19 20:43 zhengbiyu 阅读(23) 评论(0) 推荐(0) 编辑
Tomcat类加载
摘要:tomcat如何实现,应用隔离类加载? org.apache.catalina.loader.WebappClassLoaderBase#loadClass(java.lang.String, boolean) (1)先在本地缓存中查找是否已经加载过该类(对于一些已经加载了的类,会被缓存在resou 阅读全文
posted @ 2023-03-19 20:37 zhengbiyu 阅读(107) 评论(0) 推荐(0) 编辑
SPI与双亲委派模型
摘要:类加载顺序图: 这样做的好处就是:Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存放在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都是同一个类 阅读全文
posted @ 2023-03-19 20:28 zhengbiyu 阅读(54) 评论(0) 推荐(0) 编辑
创建对象内存分配方式
摘要:对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方式有指针碰撞和空闲列表两种,选择哪种分配方式由 Java 堆是否规整决定,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定。 内存分配的两种方式 (补充内容 阅读全文
posted @ 2023-03-19 20:21 zhengbiyu 阅读(41) 评论(0) 推荐(0) 编辑
对象创建过程
摘要:首先进行类加载,然后会对象进行逃逸分析,如果对象引用不会逃逸,那么进行栈上分配。 编译器分层编译:C1、C2。C2下才会有栈上分配的优化,且不同虚拟机优化方式不一样,Hotspot虚拟机使用的是标量替换方式进行优化,把对象拆解,让对象的成员变量分配在栈上。 Class 文件需要加载到虚拟机中之后才能 阅读全文
posted @ 2023-03-19 20:19 zhengbiyu 阅读(18) 评论(0) 推荐(0) 编辑
常用JVM参数
摘要:-XX:+PrintCommandLineFlags 打印那些已经被用户或者JVM设置过的详细的xx参数的名称和值。 -XX:+PrintFlagsInitial 打印所有JVM参数启动的初始值 -XX:+PrintFlagsFinal 打印所有JVM参数的最终值 -Xms6144m -Xmx614 阅读全文
posted @ 2023-03-19 20:02 zhengbiyu 阅读(65) 评论(0) 推荐(0) 编辑
Card Marking
摘要:如果 young gc 线程只遍历年轻代内的对象引用,那么老年代到年轻代的跨代引用就会被忽略,被老年代存活对象跨代引用的年轻代对象会被回收,这样就破坏了应用程序的运行。但是如果每次ygc都进行全堆扫描,且ygc次数较频繁,会很慢。在 young gc 时,为了找到跨代引用,通常有这几个方法: 当对象 阅读全文
posted @ 2023-03-19 19:02 zhengbiyu 阅读(37) 评论(0) 推荐(0) 编辑
CMS
摘要:一种以获取最短回收停顿时间为目标的收集器。 特点:基于标记-清除算法实现。并发收集、低停顿。 应用场景:适用于注重服务的响应速度,希望系统停顿时间STW最短,给用户带来更好的体验等场景下。如web程序、b/s服务。 CMS收集器的缺点: CMS收集器对CPU资源非常敏感,在并发阶段虽然不会导致用户线 阅读全文
posted @ 2023-03-19 18:46 zhengbiyu 阅读(116) 评论(0) 推荐(0) 编辑
HashMap
摘要:流程 resize 初始化大小16,负载因子0.75。 当桶节点个数大于扩容阈值,会进行扩容,容量扩大到2倍。 //离100最近的2次幂是128,默认负载因子是0.75,所以扩容阈值是128*0.75=96,以下put发生rehash HashMap hashMap = new HashMap(10 阅读全文
posted @ 2023-03-19 18:15 zhengbiyu 阅读(29) 评论(0) 推荐(0) 编辑

上一页 1 2 3 下一页
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示