aepbui

锁的理论

可重入锁 可重入锁也可以被称为递归锁,指的是同一线程外层代码块获得锁之后,如果锁对象是同一个对象时 进入内层代码块自动获取该锁.可重入锁可以避免死锁 synchronized synchronized就是一种可重入锁,线程可以进入任何一个它已经拥有的锁所同步着的代码块 同一个线程调用不同的synch

AQS

概述 AbstractQueuedSynchronizer抽象的队列同步器,用来构建锁或者其他同步器组建的基础框架,通过内置的CLH队列来完成资源获取线程的排队功能(为暂时还没有抢到锁的线程管理进入队列中,这个队列就是AQS的抽象表现),通过int类型的state来表示持有锁的状态,使用CAS对该同

synchronized锁升级

锁的原理 随着java1.6对synchronized的优化,减少了获取锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁,有些情况下它就不会那么重,锁的状态分为4种:无锁、偏向锁、轻量级锁、重量级锁,这几种状态会逐渐升级 对象在内存中的存储布局可以分为对象头、实例数据、对齐填充,对象头中就包含Mar

git校验提交

通过git clone等操作会在当前目录下生成.git隐藏文件 在hooks目录下,该目录下的所有名称带sample的都是钩子函数的模板文件 当我们在测试代码的时候很有可能为了测试或者临时添加一些代码进行调试,为了避免推送到线上可以启用该脚本 在项目下的 .git/hooks目录下,将你需要进行执行

线上代码优化

前情 公司项目使用的是七牛云存储图片,然后通过后置?参数来添加水印来裁剪、缩放、添加水印等操作,也就是数据库db中存储的url只有原始图片,目前只有问卷系统才能展示有水印的图片,新需求需要将压缩包打包的资源也要添加水印 解决方案是在打包前将所有资源追加水印后,最后再统一导出带水印的资源 但是七牛云是

PlantUML

前言 之前一直使用processon来画思维导图,但是需要付费.如果使用免费版本有存储限制,这些手动拖拽的工具很难对齐并且最近发现导出svg格式都需要会员了,所以果断遗弃 现在比较常用的图表工具分别是PlantUML和Mermaid.PlantUML使用一种类似于编程语言的语法,被各种IDE集成.而

字节码内部指令

java代码,以下代码在实际文件中,在9行到13行 public static void main(String[] args) { LocalVariablesTest test = new LocalVariablesTest(); int num = 10;

垃圾回收

相关概述 手动回收 在默认情况下调用System.gc()或者Runtime.getRuntime().gc()会显示的触发FullGC从所有丢弃的空间回收兑现,但是只是提醒jvm进行垃圾回收,无法保证对垃圾收集器的调用 可以通过手动调用触发来决定JVM的GC行为,但是一般情况下垃圾回收应该是自动进

StringTable

基本特征 java中8种基本数据类型和字符串,为了让他们运行过程更快,更节省内存空间,提供了常量池的概念,常量池属于jvm提供的缓存,String的常量池比较特殊 直接使用双引号声明或使用String的intern方法创建String对象会直接存储的常量池中 常量池中不会存储相同的字符串 当对字符串

监控调优

调优步骤 性能监控 一种非侵入方式收集或者查看应用运营性能数据的活动.监控通常是一种在生产、质量评估或者开发环境下实施的带有预防或者主动性的活动.当应用的出现性能问题却没有足够多的线索时,首先需要进行性能监控 如GC频繁、cpu负载过高、OOM、内存泄漏、死锁、应用响应时间过长 性能分析