xiaopang Blog

天道酬勤

弱引用局部变量进入老年代问题

弱引用局部变量本应在年轻代回收,却进入老年代导致full gc频繁问题

前述 在项目中忽然发现频繁的出现full gc,经过排查发现一个局部变量通过弱引用链接到全局缓存中,在minor gc 中无法被回收,导致进入老年代。 其简单的类结构关系: 问题复现 测试环境 JDK:jdk1.8.0_151 JVM args: -Xmx500m -Xms500m 运行代码 public class WeakRefTest { @Test ...

ClassCircularityError异常问题排查

一次奇怪的ClassCircularityError异常问题排查

前述 在客户的机器上出现了异常报错导致了应用启动不起来。其中报错是 java.lang.ClassCircularityError: java/security/Permission,都是在自定义的SecurityManager方法中抛出的。 Exception in thread "Thread-22" java.lang.ClassCircularityError: java/sec...

从使用到源码:MyBatis 动态sql

MyBatis 动态SQL构建原理

概述 在mybatis中动态sql是一项非常重要的功能,它是灵活构建sql的基石,现在我们就来看看mybatis是如何实现动态sql这一功能的。 写个简单的测试用例用于debug。 <select id="getEmpById" resultType="com.learn.mybatis.bean.Employee"> select id, last_name la...

一致性哈希算法

一致性哈希算法

开头 今天在学习负载均衡的时候有学到了哈希路由的方式用于将用户机与后端集群中的服务机进行关联,使得同一台用户机的多次请求都落在同一台服务机上。 所有今天我们就来聊一聊哈希路由。 概念 Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常...

从使用到源码:MyBatis 参数

MyBatis SQL参数填充原理

概述 我们知道 MyBatis是一个持久层框架,它是对jdbc的操作数据库的过程进行了封装。 所以通过原生jbdc的操作过程映射在MyBatis上可以加快我们对其源码和原理的了解。 而本章要讲解的就是上图中的 传入参数 在mybatis中是如何实现的? 传入流程 写个简单的测试用例用于debug。 @Test public void test2() { SqlSessi...

MyBatis使用说明书

MyBatis使用说明:参考mybatis文档和尚硅谷mybatis教程所作的个人笔记

初始化 配置文件 全局 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configurat...