道阻且长,行则将至

Scroll Down

Java虚拟机-Java内存模型与线程

Java内存模型主内存和工作内存Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。此处的变量与Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私

Java虚拟机-类加载机制

概述Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为虚拟机的类加载机制。类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Ver

Java虚拟机-垃圾收集器与内存分配策略

概述垃圾收集器主要完成三件事情:1、哪些内存需要回收2、什么时候回收3、如何回收在Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就

ThreadPool源码分析

ThreadPoolExecutorThreadPoolExecutor 是 JDK 中的线程池实现,这个类实现了一个线程池需要的各个方法,它实现了任务提交、线程管理、监控等等方法。我们可以基于它来进行业务上的扩展,以实现我们需要的其他功能,比如实现定时任务的类 ScheduledThreadPoo

AQS各种锁获取和释放流程梳理

概述AQS中获取锁和释放锁有两种模式:独占锁独占锁获取的流程:1、获取锁失败(tryAcquire返回false)先加入到阻塞队列中2、循环获取同步状态获取不到就挂起,直到被唤醒抢占头节点并继续执行。独占锁释放的流程:1、释放锁成功(tryRelease返回true)2、判断head节点不为空,并且

kafka消息模型

消息引擎系统在设计一个消息引擎系统时需要考虑的两个重要因素:1、消息设计2、传输协议设计消息设计消息引擎在设计消息时一定要考虑语义的清晰和格式上的通用性。一条消息要有能够完整清晰表达业务的能力,他不能是含糊不清,语义不明甚至无法处理的。同时,为了更好地表达语义以及最大限度地提高通用性,消息通常都采用

RocketMQ消息模型

概述发布-订阅(Pub/Sub)是一种消息范式,消息的发送者(称为发布者、生产者、Producer)会将消息直接发送给特定的接收者(称为订阅者、消费者、Comsumer)。而RocketMQ的基础消息模型就是一个简单的Pub/Sub模型。生产者负责生产消息,一般由业务系统负责生产消息。一个消息生产者

order by实现原理

概述在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` ( `

解决数据库死锁的一些方式

解决死锁的最佳方式当然就是预防死锁的发生了,我们平时编程中,可以通过以下一些常规手段来预防死锁的发生:在编程中尽量按照固定的顺序来处理数据库记录,假设有两个更新操作,分别更新两条相同的记录,但更新顺序不一样,有可能导致死锁;在允许幻读和不可重复读的情况下,尽量使用 RC 事务隔离级别,可以避免 ga

如何优化垃圾回收机制

垃圾回收机制掌握 GC 算法之前,我们需要先弄清楚 3 个问题。第一,回收发生在哪里?第二,对象在什么时候可以被回收?第三,如何回收这些对象?1. 回收发生在哪里?JVM 的内存区域中,程序计数器、虚拟机栈和本地方法栈这 3 个区域是线程私有的,随着线程的创建而创建,销毁而销毁;栈中的栈帧随着方法的