![](https://img-blog.csdnimg.cn/5fe62d7650fc42549f7b4b81d32a955f.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java与JVM
文章平均质量分 91
java知识集合与源码阅读与JVM知识
菜鸟学习JAVA
仅用于分享一下自己的学习笔记,有错误的话请大佬指出
展开
-
JAVA线程池必知必会
J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。原创 2022-02-22 21:37:12 · 299 阅读 · 0 评论 -
Java动态代理(JDK动态代理和cglib)
JDK动态代理JDK的动态代理只允许代理接口重要的类和接口Proxy和InvocationHandlerProxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)方法创建目标对象的代理对象获取到目标对象的代理对象之后,执行目标对象的方法实际上是通过调用代理对象的invoke方法实现的我们可以在invoke方法中增加额外的通用的逻辑来对目标对象进行增强/** * @Desc原创 2021-11-24 23:26:01 · 327 阅读 · 0 评论 -
SpringBoot启动过程分析——启动过程源码分析
项目启动入口实际执行的内容是通过SpringApplication类的静态方法创建一个ConfigurableApplicationContext,顾名思义,即可配置的对象容器,也就是Springboot中的上下文/** * Static helper that can be used to run a {@link SpringApplication} from the * specified source using default settings. * @param primarySou原创 2021-11-07 23:42:59 · 875 阅读 · 0 评论 -
JAVA垃圾收集器之G1
Garbage First(G1)收集器Garbage First(简称G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集 器面向局部收集的设计思路和基于Region的内存布局形式。G1提供并发的类卸载的支持,补全了其计划功能的最后一块拼图。这个版本以后的G1收集器才被Oracle官方称为“全功能的垃圾收集器”(Fully-Featured Garbage Collector)。G1是一款主要面向服务端应用的垃圾收集器。HotSpot开发团队最初赋予它的期望是(在比较长 期的)未来可以原创 2021-09-11 22:40:48 · 1873 阅读 · 0 评论 -
CAS原理详解
CAS简介CAS 的意思是 compare and swap,比较并交换。CAS 的引入是为了解决java锁机制带来的性能问题。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。解决线程安全问题volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。独占锁原创 2021-09-11 22:11:21 · 2204 阅读 · 0 评论 -
JVM垃圾收集器
Serial收集器Serial收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新生代 收集器的唯一选择。大家只看名字就能够猜到,这个收集器是一个单线程工作的收集器,但它的“单线 程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强 调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。“Stop The World”这个词语也 许听起来很酷,但这项工作是由虚拟机在后台自动发起和自动完成的,在用户不可知、不可控的情况原创 2021-09-08 22:41:38 · 1624 阅读 · 0 评论 -
JAVA垃圾回收算法
概述Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。C++内存的申请和释放都可以由程序员手动进行,而Java则采用了自动垃圾回收机制使程序员更关注于业务而无需在内存分配和回收上花费太多的时间。但是我们仍然需要去学习Java的垃圾回收机制,要理清楚Java的垃圾回收机制,要搞清楚三点:哪些内存需要回收什么时候回收怎么回收如何判断对象已经成为垃圾在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要.原创 2021-09-05 18:21:33 · 3810 阅读 · 0 评论 -
JAVA线程池ThreadPoolExecutor详解
1、开发规约阿里巴巴开发手册中关于线程和线程池的使用有如下三条强制规约【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。正例:自定义线程工厂,并且根据外部特征进行分组,比如,来自同一机房的调用,把机房编号赋值给whatFeatureOfGrouppublic class UserThreadFactory implements ThreadFactory { private final String namePrefix; private final AtomicIn原创 2021-08-15 16:59:00 · 3736 阅读 · 0 评论 -
HashMap源码数据结构与动态扩容分析
涉及知识点位运算 继承 数据结构 数组 链表 红黑树HashMap基本知识JDK1.8之前数据结构是数组+链表JDK1.8以后采用数组+链表+红黑树其中,当数组元素超过64个且数组单个位置存储的链表元素个数超过8个时,会进化成红黑树,红黑树的引进时为了加快查找效率同样,当数组单个位置存储的链表元素个数少于6个时,又会退化成链表HashMap重要的类属性其实JDK的源码都有非常详细的注释,但还是翻译一下吧,如下:初始容量大小为16/** * The default initial原创 2021-08-01 22:41:46 · 4088 阅读 · 0 评论 -
RabbitMQ实战指南之消息可靠性
要保证消息的可靠性,就需要保证消息在流转的每一个阶段都能够保证可靠性从图上我们大概可以看出来一个消息会经历四个节点,只有保证这四个节点的可靠性才能保证整个系统的可靠性。生产者发出后保证到达了MQ。MQ收到消息保证分发到了消息对应的Exchange。Exchange分发消息入队之后保证消息的持久性。消费者收到消息之后保证消息的正确消费。生产者发送消息到MQ Broker可靠性保障这是消息流转的第一个过程,我们的生产者发送消息之后可能由于网络闪断等各种原因导致我们的消息并没有发送到MQ之中,原创 2021-07-26 14:19:29 · 5272 阅读 · 0 评论 -
Java限流策略与算法
概要在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待、排队、降级、拒绝服务等。对一般的限流场景来说它具有两个维度的信息:时间:限流基于某段时间范围或者某个时间点,也就是我们常说的“时间窗口”,比如对每分钟、每秒钟的时间窗口做限定资源:基于可用资源的限制,比如设定最大访问次数,或最高可用连接数上面两个维度结合起来看,限流就是在某个时间窗口对资源访问做限制,比如设.原创 2021-07-08 22:42:21 · 6239 阅读 · 0 评论 -
JAVA集合——可维护插入、大小、访问顺序的Map集合
概述先上一张JAVA集合继承关系图:使用Map时,用得最多的是HashMapMap<String, String> hashMap = new HashMap<String, String>();但是HashMap是无序的,既不保证元素按插入顺序性,也不保证元素按给定的排序方法按大小进行排序。HashMap无序HashMap的底层实现是哈希映射,所以表现为Hash的特点,不具有有序性代码实例public class Test { public static原创 2021-07-10 19:30:52 · 6817 阅读 · 0 评论 -
JVM内存结构
概述其实 Java 虚拟机的内存结构并不是官方的说法,在《Java 虚拟机规范》中用的是「运行时数据区」这个术语。但很多时候这个名词并不是很形象,再加上日积月累的习惯,我们都习惯用虚拟机内存结构这个说法了根据《Java 虚拟机规范》中的说法,Java 虚拟机的内存结构可以分为公有和私有两部分。公有指的是所有线程都共享的部分,指的是 Java 堆、方法区、常量池。私有指的是每个线程的私有数据,包括:PC寄存器、Java 虚拟机栈、本地方法栈。公有部分在 Java 虚拟机中,线程共享部分包括Jav原创 2021-07-14 21:47:18 · 5847 阅读 · 0 评论 -
JVM类加载机制
类加载的时机关于在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规范》中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,《Java虚拟机规范》则是严格规定了有且只有六种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。能够生成这四条指令的典型Java代码场景有:使用n..原创 2021-07-14 22:26:59 · 5844 阅读 · 0 评论 -
JAVA Class类与反射
关于Class类与Class对象与反射Class类与Class对象Class对象是Class类的实例,类至少包含以下信息,因此class类又可以被 解构为如下部分:权限修饰符类名参数化类型(泛型信息)接口Interface注解Annotation字段Field(重点)构造器Constructor(重点)方法Methd(重点)以下图为例:整个.class文件最终都成为字节数组byte[] b,里面的构造器、方法等各个“组件”,其实也是字节。打开Class类的源代码,发现果然如此:原创 2021-07-24 12:07:25 · 6487 阅读 · 0 评论