- 博客(21)
- 问答 (1)
- 收藏
- 关注
原创 JVM 垃圾回收算法
通过一系列称为“GC Roots”的根对象作为起始节点,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。收集器将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储,针对不同的区域安排与里面存储对象存亡特征相匹配的垃圾收集算法。
2024-07-17 17:37:54
964
原创 JVM内存划分
直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。ava堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩展来实现的(通过参数-Xmx和-Xms设定)。
2024-07-17 14:15:10
906
原创 类的加载机制详解
一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历以下几个阶段准备(Preparation):准备阶段是正式为类中定义的变量(即静态变量,被static修饰的变量)分配内存并设置类变量初始值的阶段,这时候进行内存分配的仅包括类变量,而不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在Java堆中。这个时候的初始值指的是数据类型的默认值,不是我们编码定义的那个值。解析(Resolution):解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程。
2024-07-16 17:44:19
597
原创 volatile关键字详解
volatile 关键字在并发三特性中只有可见性和有序性,所以并不能保证并发的安全,并发安全还是得使用synchronized 关键字来保证。
2024-07-16 15:49:08
272
原创 万字长文带你认识DDD领域驱动
关于DDD领域驱动介绍的书内容大多都是概念,落地的架构代码实现派系众多,很多初学者不得其道,其实我们只要抓住以下最核心的问题在工作设计中去深入体会即可:DDD 第一个重要部分就是战略设计,战略设计就是业务分析、创建领域模型,通常有事件风暴、四色建模法等,这里文章提及比较少,自己可以学习相关方法,提升自己的业务分析建模能力DDD第二个重要部分就是战术设计,战术设计就是合理的代码分层、分包、利用战略设计的建模来创建聚合、实体,使业务代码稳定健壮。
2024-07-11 16:23:13
497
原创 线程池的使用
以下是线程池的构造方法源码,我们依次解释如果当前任务队列待执行任务数量小于核心线程池数量,执行器总是优先创建一个任务线程如果当前任务队列待执行任务数量大于核心线程池数量,执行器总是优先从线程池中取一个空闲线程如果当前任务队列待执行任务数量大于核心线程池数量,且线程池中无空闲任务线程,将会创建一个任务线程,直到超出maximumPoolSize,如果超时maximumPoolSize,则任务将会被拒绝。
2024-07-11 15:27:04
427
原创 JUC包中的各种同步器
park(): 阻塞当前线程,直到unpark方法被调用或当前线程被中断,park方法才会返回。parkNanos(long nanos): 同park方法,nanos表示最长阻塞超时时间,超时后park方法将自动返回。单位是纳秒 ,1秒 = 100010001000 纳秒parkUntil(long deadline): 同park()方法,deadline参数表示最长阻塞到某一个时间点,当到达这个时间点,park方法将自动返回。(该时间为从1970年到现在某一个时间点的毫秒数)
2024-07-10 18:24:20
895
原创 并发编程之AQS详解
使用了一个int成员变量state来表示同步锁状态,通过内置的FIFO(first-in-first-out)同步队列来控制获取共享资源的线程。内部state 和Node 内部类的属性都被volatile 关键字修饰,在修改state 和 阻塞队列时 都使用CAS机制循环添加,保证并发安全。所以可以说AQS就是利用volatile 和CAS的实现。线程的阻塞方法都是使用的unsafe类进行的。进入到队列后,线程的阻塞和唤醒是使用的。内置的三个修改同步状态的方法。接下来先看下关键源码。
2024-07-04 16:38:17
230
原创 并发编程中的Synchronized锁详解
重量级锁对象的实现,采用C++ 编写,在Synchronized 同步的对象的对象头MarkWord中指针指向这个真正的对象。第三部分:填充字符,因为虚拟机要求对象字节必须是8字节的整数倍,填充字符就是用于凑齐这个整数倍的。第二部分:实例变量存储的是对象的属性信息,包括父类的属性信息,按照4字节对齐。Synchronized 的锁存在锁对象的对象头MarkWord中。第一部分:对象头,主要包括。由图中可用得出两个结论。
2024-07-04 15:45:43
597
原创 Spring中的事务同步管理器
Spring 中的事务同步管理器是一个非常重要的扩展点,它允许开发者参与到 Spring 管理的事务生命周期中的特定阶段,从而能够在事务开始前、事务结束(提交或回滚)前后执行自定义的操作。这个接口主要用来实现事务相关的同步行为,帮助开发者实现在事务边界上进行资源清理、刷新缓存、发送通知等操作。//提交状态//回滚状态//状态未知,比如事务提交或者回滚的过程中发生了异常,那么事务的状态是未知的。
2024-07-02 17:23:43
391
原创 Spring 中的各种拦截器
在本文旨在梳理Web项目开发过程的各拦截器用法场景,以及它们之间的区别与联系,方便我们在请求到达的各个环节进行拦截处理。
2024-05-10 17:55:55
1277
2
原创 Java中的泛型
1. 泛型类的使用(接口和类一样)1.1. 子类也是泛型类,子类和父类的泛型类型要一致。public class FoodPlate<T> extends Plate<T> { private T food; @Override public T getFood() { return food; }}1.2. 子类不是泛型类,父类要明确泛型的数据类型。public class FoodPlate extends Plat
2024-05-08 22:40:52
198
空空如也
MyEclipse 配置 JVM内存 小白提问,求大神指点!
2017-08-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人