#Java

Java Runtime Data Area,即运行时数据区。一个 class 文件经过 ClassLoader 加载进入运行时数据区。

那么运行时数据区包含了什么信息呢?

阅读更多

后端讲求的是高并发、高性能、高可用(3H),但是要实现 3H,通常是通过优化架构(横向分层,纵向分割)、使用缓存、分布式化和集群化等手段来实现。很少会自己写线程代码,日常开发在需要用到多线程的地方也大多都交给框架处理,对多线程和锁原理的理解一直不够深入。

趁着周末有时间,从简单的线程创建方式开始讲起,逐步深入了解关于线程的几种状态和锁原理。针对一些以前没写过独立文章的锁实现,还会展开来讲。

阅读更多

Java 中实现线程同步用得最多的是 synchronized ,但使用 synchronized 本质是锁升级的过程。当升级到重量级锁之后会有性能问题。而且无法当并发数下来之后,无法进行“锁降级”操作。

ReentrantLock 本质是 CAS 操作,都是在用户态进行,没有涉及到重量级锁的内核态指令,而且能够手动控制获取锁和释放锁。

阅读更多

我们知道,直接编写好的类( java 文件)是不能被直接运行的,必须先编译成 class 文件,才能被 JVM 所运行。

今天要聊的就是 JVM 加载 class 文件进内存的过程,也就是 Java Class 的加载过程。

阅读更多

synchronized 作为使用得最多的多线程同步方案,可以说适用于绝大多数需要保证线程安全的场景。

但是关于 synchronized 是如何实现线程安全,背后使用了什么锁机制呢?以及使用synchronized 有什么别的注意事项?

阅读更多

都知道 Java 是通过垃圾回收来实现自动管理内存。

那么主流的到底有多少款垃圾回收器呢?不同的垃圾回收器使用到了什么垃圾回收算法,以及是如何定位“垃圾”对象的?如何通过 GC 日志来进行 JVM 调优?…

阅读更多

这是我的 MyBatis 学习笔记的第四篇:深入了解 MyBatis 的动态 SQL 。

相信自己使用过拼接字符串的方式来实现动态 SQL 的读者都知道,那简直是个噩梦,因为要处理很多边缘逻辑。

例如当没有条件的时候要消除 “WHERE” ,第一个被查询的条件不能拼接 “AND “ | “OR “ ,拼接一个列表的时候要消除最后一个 “,” … 但是使用 MyBatis 却十分简单。

阅读更多

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×