自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(410)
  • 收藏
  • 关注

原创 jvm六之虚拟机类加载机制

类加载时机6种情况必须对类初始化(主动引用,其余引用为被动引用) 1:new/获取或赋值静态变量以及调用静态方法 2:反射 3:初始化一个类,父类如还没初始化,先初始化其父类 4:虚拟机启动时,用户指定要执行的main() 5:jdk7新特性,如果一个java.lang.invoke.MethodHandle实例最后的解析结果为REF_getStatic、REF_putStatic、REF_invokeStatic、REF_newInvokeSpecial四种类

2020-06-07 19:08:20 209

原创 jvm五之Class结构

class文件格式u+数字,本别代表对应数字字节的无符号数,可以用来描述数字,索引引用,数量值整个class就是一个表,由多个无符号或其他表构成,以_info结尾1-4字节:魔数,用来描述这个文件到底啥类型,是否是class,class的值为CAFEBABE,5-8这4字节存class版本号,5/6位次版本号,7/8主版本号使用工具javap -verbose class文件名常量接着2字节表示常量池容量个数,容量从1开始,所以具体容量为值-1,保留0是为了不引用任何一个常量池项

2020-06-07 14:54:41 170

原创 jvm四之性能调优

这里写目录标题常见问题处理jvm调优编译时间和类加载时间优化调整垃圾收集频率设置垃圾收集器降低延迟常见问题处理64位JDK和32最大的不同就是64位可以使用大内存,但因此造成如果出现问题排查,dump的文件过大,产生快照也无法分析而且64位因为涉及到指针膨胀和数据类型对齐之内,造成无辜内存损失,最重要的是性能比32位低根据运行环境选择适当的位数JDK,以及针对吞吐和并发请求等条件选择垃圾回收器使用nio时,因为使用的是系统内存,所以jvm运行时候,设置恰当的堆内存,以便保留适当的系统内存给ni

2020-06-05 12:09:11 270

原创 jvm三之虚拟机性能监控以及故障处理

文章目录命令行工具jps(JVM process Status Tool)jstat(JVM statistics Monitoring Tool)jinfojmapjhatOQLjstack可视化工具jconsole空循环活锁死锁jvisualvm插件下载生成堆快照保存以及导入分析CPU和内存BTrace动态日志跟踪代码清单具体功能都在tools.jar中命令行工具jps(JVM process Status Tool)虚拟机进程状况工具 列出正在运行的虚拟机进程, 显示虚拟机执行主

2020-06-05 10:24:07 802

原创 jvm二之垃圾回收与分配策略

文章目录4种对象引用机制强引用软引用弱引用虚引用垃圾回收算法引用计数算法根搜索算法标记二次在清除垃圾收集算法标记清除算法复制算法标记-整理算法分代收集算法垃圾收集器Serial收集器Serial Old收集器ParNew收集器Parallel Scavenge收集器(吞吐量优先收集器)Parallel Old收集器CMS收集器G1收集器回收方法区内存分配与回收策略例子设置大对象直接进入老年代长期存活对象进入老年代空间分配担保内存分配执行过程每个栈分配多少内存,基本上在类结构确定的时,就已知了所以栈,本地

2020-06-04 22:18:36 212

原创 jvm一之java内存

java内存模型Java7之前,常量池是存放在方法区(永久代)中的。Java7,将常量池是存放到了堆的老年代中。Java8之后,取消了整个永久代区域,取而代之的是元空间。常量池依然存放在老年代中。程序计数器当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复…都依赖这个计数器完成如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码字节码指令的地址如果正在执行的是nat

2020-06-04 17:48:33 570

原创 jdk源码解析六之native

如何查看本地方法?拿Thread.currentThread作为例子可见在jdk源码中调用的是本地方法对应的包名是java.lang,在jdk源码中根据对应的路径名查找到Thread.c这2个头分别在openjdk\jdk\src\share\javavm\export目录不知道什么鬼.有时间了解JNI在去仔细琢磨这个玩意儿....

2020-06-04 16:24:09 189

原创 jdk源码解析七之Lock

锁同步锁,是可重入锁,这样当访问本类或者超类其他加锁方法时,也能访问成功,从而避免死锁加锁,可保证互斥,内存可见性,避免重排序 3种方式 1:减少锁持有时间 H_AttributeStore/I_BetterAttributeStore 由于只有一个状态变量,可以使用其他容器类,如SyncMap/ConcurrentHashMap,这样无需显示同步,缩小了访问锁的范围,降低了代码维.

2020-06-04 12:07:37 592 1

原创 jdk源码解析五之Executor框架(ThreadPoolExecutor,Thread,ScheduledExecutorService)

线程池锁同步锁,是可重入锁,这样当访问本类或者超类其他加锁方法时,也能访问成功,从而避免死锁加锁,可保证互斥,内存可见性,避免重排序

2020-05-27 18:58:16 699

原创 jdk源码解析四之AQS框架(闭锁,栅栏,信号量等)

线程池锁同步锁,是可重入锁,这样当访问本类或者超类其他加锁方法时,也能访问成功,从而避免死锁加锁,可保证互斥,内存可见性,避免重排序

2020-05-27 13:16:19 550

原创 jdk源码解析三之JUC并发容器

本篇文章主要是对JUC包下,一些并发类的源码分析,如果想了解具体实例,请点击原子类数据结构ConcurrentHashMapputIfAbsent //没key则添加 V putIfAbsent(K key, V value);removekey映射为value,则移除replacekey对应value为oldValue则更新为newValuereplacekey映射有值,则更新没有实现对map进行加锁来执行独占访问,因为采用了分段锁,所以无法使用客户端加锁来创建

2020-05-26 12:41:25 1140

原创 多线程笔记

避免使用同步的方式一:线程封闭线程封闭:访问共享的可变数据时,需要使用同步,避免使用同步的方式就是不共享数据,仅是单线程访问数据不需要同步,当某个对象封装在一个线程中,这种用法将自动实现线程安全性,即使被封闭的对象本身不是线程安全的如:swing/jdbc的connection对象/局部变量/ThreadLocalAd-hoc线程封闭:维护线程封闭的职责完全由程序实现来承担。栈封闭(线程内部(局部)使用):只能通过局部变量才能访问对象对于基本数据类型无法获得引用,所以确保了封闭在线程中使用T

2020-05-25 16:52:53 386

原创 jdk源码解析二之Map

MapHashMapHashMap的loadFactor为什么是0.75?主要涉及到泊松分布的概念,猝!!!一个bucket空和非空的概率为0.5,通过牛顿二项式等数学计算,得到这个loadfactor的值为log(2),约等于0.693. 同回答者所说,可能小于0.75 大于等于log(2)的factor都能提供更好的性能,0.75这个数说不定是 pulled out of a hat。put public V put(K key, V value) { return

2020-05-25 13:54:26 619

原创 jdk源码解析一之Collection

Collection架构ListArrayListcloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则会抛出CloneNotSupportedException(克隆不被支持)异常。Object中clone方法: protected native Object clone() throws CloneNotSupportedException;具体点击此博客Rand

2020-05-24 17:29:29 529

原创 mybatis源码解析九之整个加载流程解析

demo地址 public static void main(String[] args) throws Exception { Reader reader = Resources.getResourceAsReader("mybatis/SqlMapconfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSess

2020-05-24 12:04:45 306

原创 mybatis源码解析八之other

拦截器public interface Interceptor {//执行拦截逻辑的方法 Object intercept(Invocation invocation) throws Throwable;//决定是否触发intercept ()方法 default Object plugin(Object target) { return Plugin.wrap(target, this); }//根据配置初始化Interceptor 对象 default void setP

2020-05-13 11:41:34 338

原创 设计模式工作应用

策略定义策略context类定义策略类这里可以考虑用枚举优化,以及策略类通过spring根据策略接口获取模板orderMsgDingding对应数据库表,存储权限命名的类和订单状态关系,这样当涉及改变,只需要修改类和订单状态即可,public class OrderStatusExec implements BeanFactoryAware { @Autowired private OrderMsgDingdingService orderMsgDingdingService; @A

2020-05-13 09:15:03 263

原创 mybatis源码解析三之(xml解析器dom和sax)5

xpath解析xmlpublic class XPathParser { private final Document document; //是否开启验证 private boolean validation; //加载本地DTD private EntityResolver entityResolver; //Properties标签定义值 private Pr...

2020-05-13 08:35:41 289

原创 mybatis源码解析七之对性能的优化

session 一级缓存优化/** * Copyright 2009-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the

2020-05-13 00:56:05 334

原创 mybatis源码解析六之执行过程

MyBatis 初始化SqlSessionFactoryBuilderpublic class SqlSessionFactoryBuilder {public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { //读取配置文件 XMLConfigBuilder parser = new XMLConfigBuilder(

2020-05-13 00:51:57 423

原创 mybatis源码解析四之各大组件

xpath解析xmlpublic class XPathParser { private final Document document; //是否开启验证 private boolean validation; //加载本地DTD private EntityResolver entityResolver; //Properties标签定义值 private Pr...

2020-05-09 12:20:04 507

原创 mybatis源码解析五之设计模式

单例模式利用static的特性,类加载器只会加载一次同时上锁的特性,实现懒加载.public abstract class VFS { private static class VFSHolder { static final VFS INSTANCE = createVFS(); @SuppressWarnings("unchecked") static VFS createVFS() { // Try the user implementations fi

2020-05-08 18:55:49 256

原创 mybatis源码解析二之(xml解析器dom和sax)

dom<?xml version="1.0" encoding="UTF-8" standalone="no"?><exam> <Student examid="22" idcard="01"> <name value="zhangsan">张三</name> <location>湖北...

2020-04-30 09:13:35 286

原创 spring5.1.x源码解析之十三(spring自动注入)

吃饭去咯

2020-04-29 19:45:21 207

原创 spring5.1.x源码解析之十二(列出10大设计模式)

责任链模式org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor#interceptpublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable ...

2020-04-29 19:42:53 295

原创 spring5.1.x源码解析之十一(spring-activeMQ)

demopackage org.example.activemq.test;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class Receiver { public static void main(String[] args) throws Exceptio...

2020-04-29 18:45:20 339

原创 spring5.1.x源码解析之十(spring-rmi)

RMI demopackage org.example.rmi.test;import java.rmi.*;public interface MyRemote extends Remote { public String sayHello() throws RemoteException;}package org.example.rmi.test;import java....

2020-04-29 13:21:03 208 1

原创 spring5.1.x源码解析之九(spring-mvc)

配置文件web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocati...

2020-04-28 00:17:39 527

原创 spring5.1.x源码解析之八(事务处理)

有点意思

2020-04-26 13:24:35 240

原创 mybatis源码解析一之(demo)

稍等

2020-04-25 13:01:13 171

原创 spring5.1.x源码解析之七(spring-mybatis)

写累了,我躺一下

2020-04-25 12:57:33 338

原创 spring5.1.x源码解析之六(JDBC)

spring对JDBC只是进行了简单的封装,主要大范围利用回调函数解耦,相对来说灵活性也比较高.但没有针对数据库一些特性进行处理配置文件<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:...

2020-04-25 12:51:22 392

原创 spring5.1.x源码解析之五(AOP)

吃饭去咯

2020-04-24 13:52:58 317 1

原创 spring5.1.x源码解析之四(自定义属性编辑器执行逻辑)

//registerBeanPostProcessors会注册所有自定义编辑器,对应AbstractBeanFactory.customEditors //AbstractBeanFactory.initBeanWrapper会使用编辑器,对应AbstractBeanFactory.propertyEditorRegistrars 抽空写完...

2020-04-23 18:54:53 273

原创 spring5.1.x源码解析之三(new ApplicationContext())

= =

2020-04-23 10:42:02 404

原创 spring5.1.x源码解析之一(new XmlBeanFactory())

/* 这里分别使用 装饰者模式:使用EncodedResource包装Resource,对编码进行处理 策略模式:Resource针对不同的资源实现了,实现了不同的策略 */ @Override public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException { r...

2020-04-22 18:59:28 298

原创 spring5.1.x源码解析之二(XmlBeanFactory#getBean)

/* 缓存中获取值 工厂bean和普通bean的实际获取 没有的话创建对象 如果正在创建则异常,后续进行非单例的对象创建的时候会设置创建中 从父BeanFactory获取 标记正在创建或已经创建完成 合并父类相关属性到beanDefinition 判断是否是抽象类 依赖校验 注册依赖关系 提前初始化依赖的对象 创建单例对象 ...

2020-04-21 22:45:45 214

原创 rocketMQ安装过程以及所踩过的很多坑

最近公司要做一个定时器功能,需求如下1:s-e时间范围内,执行n分钟后关闭m分钟,在执行n分钟在关闭m分...2:定时执行3:重复执行开始想了8套解决方案,在此做一个记录1:定时器每分钟扫描数据库表,缺点数据库压力过大等2:考虑数据库压力过大,遂考虑缓存优化,redis缓存在线的设备的定时任务,数据库定期增量update到redis3:4:5:6:7:spring动态定时器+延时队列8:延时队列物...

2018-02-12 14:41:09 9150

原创 nginx的upstream目前支持的5种方式的分配

1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; }2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver { server

2017-07-05 20:25:53 541

原创 你凭什么上北大

作者:贺舒婷,高考分数641,现为北京大学法学院本科生。末名湖边的桃花儿开了,就在前几天。我曾经无数次梦想过,陌生花开的时候湖边折枝的人群里会有自己的身影。那个时候,我的心思和大家一样单纯而迫切,我的目光却是比你们更加迷茫和恍惚。那年高三。十年磨一剑,我得到的却几乎只是一块废铁。高一那年,我真的差点就把自己废成了一块锈铁。上课的时候睡觉聊天看漫画吃零食,跟着后面那些男生大呼小叫,把年轻的女老师气得眼

2017-07-05 20:24:54 802

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除