摘要:
自定义context:component-scan标签的解析流程 除了ComponentScan和Spring自己添加注册的BeanDefinition,其他所有的BeanDefinition都是基于XML解析流程。 而在解析component-scan标签时,使用了ComponentScanBea 阅读全文
posted @ 2024-06-15 22:04
vello
阅读(28)
评论(0)
推荐(0)
摘要:
1.将配置文件解析成Document对象 2.解析Document对象的每个Element标签 3.将Element标签解析成BeanDefinition对象 4.最后将BeanDefinition对象保存到DefaultLisableBeanFactory的BeanDefinitionNames和 阅读全文
posted @ 2024-06-15 22:00
vello
阅读(13)
评论(0)
推荐(0)
摘要:
1.AbstractApplicationContext.obtainBeanFactory方法中,模版调用 2.AbstractRefreshableApplicationContex.refreshBeanFactory 该方法中会创建 DefaultListableBeanFactory用于收 阅读全文
posted @ 2024-06-15 21:58
vello
阅读(28)
评论(0)
推荐(0)
摘要:
1.id 再Spring容器中作为Bean的唯一标识 2.name 用于为id属性创建一个或多个别名,用空格、逗号分开 3.class Bean的类名,全限定名 primary 多个相同Bean再容器中的优先级 5.parent 标注该Bean的父类Bean,继承父类Bean的所有属性 6.abst 阅读全文
posted @ 2024-06-15 21:08
vello
阅读(48)
评论(0)
推荐(0)
摘要:
Spring的核心流程是读取配置文件,解析并封装成BeanDefinition,并将所有的BeanDefinition收集到一个叫DefaultListableBeanFactory的容器中。 一、setConfigLocation 设置配置路径方便后续对其进行解析 二、refresh方法,解析并封 阅读全文
posted @ 2024-06-15 20:56
vello
阅读(78)
评论(0)
推荐(0)
摘要:
Spring有四种加载方式 一、ClassPathXMLApplicationContext classPath中的xml启动方式 二、AnnotationConfigurationApplicationContext 注解扫描的启动方式 三、FileSystemXMLApplicationCont 阅读全文
posted @ 2024-06-15 19:53
vello
阅读(41)
评论(0)
推荐(0)
摘要:
自旋锁 锁的四种状态 无所状态、偏向锁状态、轻量级锁状态、重量级锁状态。 偏向锁定义 大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。无竞争时不需要进行CAS操作来加锁和解锁。 轻量级锁 通过CAS操作来加锁和解锁 重量级锁 阅读全文
posted @ 2024-06-15 17:31
vello
阅读(27)
评论(0)
推荐(0)
摘要:
Java 内存模型(JMM) 从抽象的角度来看,JMM 定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不真实 阅读全文
posted @ 2024-06-15 17:28
vello
阅读(20)
评论(0)
推荐(0)
摘要:
一、线程封闭 栈封闭,也就是局部变量表,每个线程单独拷贝一份到线程内存中 线程封闭,需要开发者自己实现,不靠谱 二、无状态的类 无任何成员变量的类,这种类一定是线程安全的。 三、让类不可变 1.加final关键字 2.不提供任何修改成员变量的入口。 3.volatile 不能保证线程安全,只能保证可 阅读全文
posted @ 2024-06-15 17:14
vello
阅读(20)
评论(0)
推荐(0)
摘要:
使用线程池带来的三个好处 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + 阅读全文
posted @ 2024-06-15 17:07
vello
阅读(62)
评论(0)
推荐(0)
摘要:
一、集合 Vector CopyOnWriteArrayList 和 CopyOnWriteArraySet ConcurrentSkipListSet 有序 Set 二、Map HashTable ConcurrentHashMap ConcurrentSkipListMap 有序 Map 三、队 阅读全文
posted @ 2024-06-15 17:00
vello
阅读(20)
评论(0)
推荐(0)
摘要:
AtomicInteger AtomicIntegerArray AtomicReference AtomicStampedReference AtomicMarkableReference AtomicIntegerFieldUpdater AtomicLongFieldUpdater Atomi 阅读全文
posted @ 2024-06-15 16:44
vello
阅读(15)
评论(0)
推荐(0)
摘要:
假定有两个操作 A 和 B,如果从执行 A 的线程来看,当另一个线程执行 B 时, 要么将 B 全部执行完,要么完全不执行 B,那么 A 和 B 对彼此来说是原子的。 synchronized 关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候, 访问同一资源的其它线程需要等待,直到该线程释放 阅读全文
posted @ 2024-06-15 16:43
vello
阅读(25)
评论(0)
推荐(0)
摘要:
一、Fork-Join 二、CountDownLatch 三、CyclicBarrier 四、Semaphore 五、Exchange 六、Callable、Future和FutureTask 阅读全文
posted @ 2024-06-15 16:34
vello
阅读(12)
评论(0)
推荐(0)
摘要:
本质原因是ThreadLocalMap中的ThreadLocal对象是一个软引用类型,弱引用类型在在触发gc时被回收,也就是将ThreadLocalMap中的key回收了,但是threadLocalMap中的value未被回收,对应的ThreadLocalMap中的entry只有value,而没有k 阅读全文
posted @ 2024-06-15 16:30
vello
阅读(24)
评论(0)
推荐(0)
摘要:
synchronized内置锁 对象锁和类锁: 对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的 class 对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个 class 对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。 但是有一 阅读全文
posted @ 2024-06-15 16:23
vello
阅读(14)
评论(0)
推荐(0)
摘要:
Thread 和 Runnable 的区别 Thread 才是 Java 里对线程的唯一抽象,Runnable 只是对任务(业务逻辑)的抽象。 Thread 可以接受任意一个 Runnable 的实例并执行 启动线程的方式有: 1、X extends Thread;,然后 X.start 2、X i 阅读全文
posted @ 2024-06-15 16:14
vello
阅读(24)
评论(0)
推荐(0)
摘要:
高并发编程的意义、好处和注意事项 由于多核多线程的 CPU 的诞生,多线程、高并发的编程越来越受重视和关注。 多线程可以给程序带来如下好处。 (1)充分利用 CPU 的资源 从上面的 CPU 的介绍,可以看的出来,现在市面上没有 CPU 的内核不使用多线程并发机制的,特别是服务器还不止一个 CPU, 阅读全文
posted @ 2024-06-15 15:35
vello
阅读(34)
评论(0)
推荐(0)
摘要:
并行 我们举个例子,如果有条高速公路 A 上面并排有 8 条车道,那么最大的并行车辆就是 8 辆,此条高速公路 A 同时并排行走的车辆小于等于 8 辆的时候,车辆就可以并行运行。 CPU 也是这个原理,一个 CPU 相当于一个高速公路 A,核心数或者线程数就相当于并排可以通行的车道;而多个 CPU 阅读全文
posted @ 2024-06-15 15:31
vello
阅读(24)
评论(0)
推荐(0)
摘要:
CPU 时间片轮转机制 我们平时在开发的时候,感觉并没有受 cpu 核心数的限制,想启动线程就启动线程,哪怕是在单核 CPU 上,为什么?这是因为操作系统提供了一种 CPU 时间片轮转机制。 时间片轮转调度是一种最古老、最简单、最公平且使用最广的算法,又称 RR调度。每个进程被分配一个时间段,称作它 阅读全文
posted @ 2024-06-15 15:26
vello
阅读(330)
评论(0)
推荐(0)
摘要:
CPU 核心数和线程数的关系 多核心:也指单芯片多处理器( Chip Multiprocessors,简称 CMP),CMP 是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的 SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个 CPU 同时并行地运行程序是实现 阅读全文
posted @ 2024-06-15 15:17
vello
阅读(812)
评论(0)
推荐(0)
摘要:
什么是进程和线程 进程是系统运行资源分配的最小单位 进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘 IO 等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配 阅读全文
posted @ 2024-06-15 15:13
vello
阅读(60)
评论(0)
推荐(0)
摘要:
面向对象 01、构造器参数太多怎么办? 如果参数很多,会导致构造方法非常多,拓展性差,代码难编写,且难以看懂。 用 JavaBeans 模式, get 和 set 一行构造编程多行代码实现,需要使用额外机制确保一致性和线程安全。 用 builder 模式, 1、5 个或者 5 个以上的成员变量 2、 阅读全文
posted @ 2024-06-15 14:33
vello
阅读(30)
评论(0)
推荐(0)
摘要:
调优的原则 1、 大多数的 java 应用不需要 GC 调优 2、 大部分需要 GC 调优的的,不是参数问题,是代码问题 3、 在实际使用中,分析 GC 情况优化代码比优化 GC 参数要多得多; 4、 GC 调优是最后的手 目的 GC 的时间够小 GC 的次数够少 发生 Full GC 的周期足够的 阅读全文
posted @ 2024-06-15 14:30
vello
阅读(14)
评论(0)
推荐(0)
摘要:
JDK 为我们提供的jvm工具 命令行工具 jps 、jstat、jinfo、jmap、jhat、jstack 可视化工具 JMX、Jconsole、visualvm 生产服务器推荐开启 -XX:-HeapDumpOnOutOfMemoryError 默认关闭,建议开启,在 java.lang.Ou 阅读全文
posted @ 2024-06-15 14:26
vello
阅读(26)
评论(0)
推荐(0)
摘要:
类加载机制 概述 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7 个 阅读全文
posted @ 2024-06-15 14:19
vello
阅读(20)
评论(0)
推荐(0)
摘要:
垃圾回收算法 复制算法(Copying) 将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使 用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要按顺序分配内 阅读全文
posted @ 2024-06-15 14:02
vello
阅读(25)
评论(0)
推荐(0)
摘要:
判断对象的存活 引用计数法 给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。(Python 在用,但主流虚拟 机没有使用) 优点:快,方便,实现简单。 缺陷:对象相互引用时(A.instance=B 同时 B.instance=A) 阅读全文
posted @ 2024-06-15 13:53
vello
阅读(28)
评论(0)
推荐(0)
摘要:
虚拟机中的对象 对象的分配 虚拟机遇到一条 new 指令时:根据 new 的参数是否能在常量池中定位到一个类的符号引用,如果没有,说明还未定义该类,抛出ClassNotFoundException 1)检查加载 先执行相应的类加载过程。如果没有,则进行类加载 2)分配内存 根据方法区的信息确定为该类 阅读全文
posted @ 2024-06-15 13:44
vello
阅读(25)
评论(0)
推荐(0)
摘要:
一、JVM运行时数据区 JVM运行时数据区是一个抽象概念,主要依赖于寄存器、高速缓存、主内存几个部分组成。 计算机运行 = 指令 + 数据,指令用于执行 方法, 数据 用于指向 存放的数据和对象。 虚拟机栈 用于执行java方法 本地方法栈 执行本地方法(通常时c语言实现的) 程序计数器 用于对 执 阅读全文
posted @ 2024-06-15 10:22
vello
阅读(29)
评论(0)
推荐(0)

浙公网安备 33010602011771号