专注写bug
你知道的越多,你不知道的也越多!
展开
-
java源码---hashmap源码分析(jdk1.8)
一、新的琢磨和旧的理解之前大致写了一篇hashmap的源码分析,地址。但总觉得理解有很多错误的理解,比如之前只理解数据存储在hashmap中开始是数组,后来是链表,再后来是红黑二叉树,但最近几周感觉理解有问题,重新理解了下,才觉得大错特错。其实真实的结构却是这样的二、hashmap新的源码解析1、创建hashmap对象HashMap map = new Hash...原创 2019-07-24 23:19:04 · 650 阅读 · 3 评论 -
JVM——垃圾收集器 G1(JDK 1.9)
文章目录前言G1 垃圾收集器(-XX:+UseG1GC) JDK 1.9关于G1的分代概念关于老年代和年轻代的大小前言在 JVM——垃圾收集器、收集算法和三色标记 博客中,详细说明了Serial / Serial Old、Parallel / Parallal Old、ParNew和CMS 等垃圾收集器的原理和区别,本篇文章主要说明G1和ZGC垃圾收集器。G1 垃圾收集器(-XX:+UseG1GC) JDK 1.9G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处原创 2021-05-13 16:55:07 · 280 阅读 · 0 评论 -
JVM——记忆集与卡表(跨代)
文章目录前言记忆集 Remember Set卡表 Card Table卡表的维护前言假设年轻代进行Minor GC做垃圾回收处理。此时会采取GC Roots (可达性分析算法),标记非垃圾对象。如果此时新生代中的某个对象,被老年代某个对象引用着。此时Minor GC操作前,需要判断当前新生代中的这个对象是否为垃圾对象,则需要去老年代中进行检索。导致可达性分析算法执行效率低下。基于上述问题,在JVM中,引入了记忆集和卡表的概念。记忆集 Remember SetJVM在年轻代中开辟了一块内存空间,原创 2021-05-07 21:12:33 · 825 阅读 · 0 评论 -
JVM——垃圾收集器、收集算法和三色标记
文章目录垃圾收集算法分代收集理论复制算法标记清除算法标记整理算法垃圾收集器Serial 垃圾收集器(jdk 1.5及之前)Parallel Scavenge 垃圾收集器ParNew 收集器CMS老年代垃圾收集器(`*`)Parallel 和 CMS对比CMS常用配置命令垃圾收集算法再JVM中,存在很多的垃圾收集算法,如下所示:其中,复制算法、标记整理算法、标记清除算法等这些算法,都是基于分代收集理论实现的。分代收集理论分代收集算法,简而言之就是针对堆内存中,根据对象存活周期的不同(如:年轻代、老原创 2021-04-26 20:47:12 · 214 阅读 · 0 评论 -
JVM——对象内存分配、对象回收算法、引用类型和finalize()
文章目录原创 2021-04-17 18:02:37 · 235 阅读 · 5 评论 -
JVM——对象创建过程
文章目录`对象`的加载1、类加载检查2、 分配内存3、初始化4、设置`对象头`对象的加载1、类加载检查JVM当识别到指令new时,首先会检查这个指令的参数,是否能在常量池中定位到一个类的符号引用。类解析的时候,会将各个变量、方法名等,解析成符号。同时给定一个地址编码,如:#2并且判断这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,则先加载这个类。2、 分配内存JVM将为这个对象在堆或栈(非对象逃逸)中,分配内存空间。也就是说在Java堆中划分一块内存为这个对象进行空间分配。原创 2021-04-15 22:00:44 · 136 阅读 · 0 评论 -
Java——打破双亲委派机制
文章目录打破双亲委派的原因Demo打破双亲委派的原因双亲委派的机制,是AppClassLoader先委托给ExtClassLoader类加载器进行加载,ExtClassLoader加载不了,则交由BootstrapClassLoader进行加载操作;如果BootstrapClassLoader依旧加载不了,则才反向委托,直至AppClassLoader加载完成。这样能保证,像java.lang.Object这些核心的类不被外界自定义加载,保证使用到的类库为官方定义的库,保证程序执行的安全性。[问:原创 2021-04-09 16:39:49 · 465 阅读 · 0 评论 -
JVM——图文并茂讲述jvm内存原理和调优
一、前言最近无意间看了个腾讯课堂的java-jvm调优视频,觉得学的深有感触,所以以下做学习知识总结。二、了解java我们都知道java具有一处编译处处执行的特点。如下所示编写的java文件,采取javac编译后,我可以在Windows端运行,也可以在linux环境下运行。就好比我们平时开发web需要在Windows下测试运行,部署服务器则在centos上运行一样。三、了解jvmjv...原创 2019-12-03 10:29:04 · 730 阅读 · 8 评论 -
java——volatile关键字(二)
一、前言上一篇博客,我们为了解决各个线程中数据的可见性问题,添加了volatile关键字,确保了线程二对全局参数的变更,能影响到线程一的操作。同时也一起分析了volatile实现的原理和MESI协议以及MESI协议原子性操作的流程。我们接下来一起加强对volatile关键字的理解。二、深入了解volatile并发编程的三大特性:《并发编程三大特性》1、可见性2、原子性3、有序性...原创 2019-11-26 17:45:52 · 312 阅读 · 0 评论 -
java——volatile关键字(一)
一、初识在我们日常的计算机处理数据时,都是cpu、主内存、缓存、高速缓存。不了解RAM的可以参考文章:RAM和ROM的区别为什么会有高速缓存这个说法?现在的cpu越来越贵,贵的不是材料,而是每一代的处理运算效率,这个效率的快慢,就在于cpu寄存器、cpu高速缓存的处理效率上,通俗而言,cpu的处理速率是远远高于主内存的处理速率的,为了防止cpu处理速率受限于主内存,所以在cpu和主内存...原创 2019-11-25 23:55:32 · 754 阅读 · 4 评论 -
Java——类加载机制和双亲委派
文章目录前言类的加载过程什么是`验证`。什么是`准备`?什么是`解析`?什么是`符号引用`?什么是动态链接?类加载机制双亲委派机制前言Java中的任何类,在使用时,都需要加载至JVM中进行执行。在一个xxx.java类加载至JVM这个操作之间,还有一些这个类的生命周期定义等,包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中加载部分,如下所示:类的加载过程加载 >> 验证 >> 准备 >> 解析 >> 初原创 2021-04-08 22:12:03 · 211 阅读 · 2 评论