自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OOM的原理和解决方案

OOM的原理和解决方案一、metaspace区内存溢出导致的oomMetaspace区域一般很少发生内存溢出,如果发生,一般是下面两个原因原因:不懂的人,在线上系统对Metaspace区域直接使用默认参数,根本不设置大小,默认大小才几十MB,对于一些大的系统来说是不够的系统代码里使用很多cglib之类的技术动态生成一些类,一旦代码中没有控制好,很容易把Metaspace给塞满,引发内存溢出解决方案:对上面第一种原因的方案:给上线系统设置对应的Metaspace大小,推荐值是512MB,一

2020-07-04 20:13:26 817

原创 JVM线上处理OOM工具jps、jstat、jmap、jhat

JVM线上处理OOM工具jps、jstat、jmap、jhat命令描述jps找出线程jps –l输出主类或者jar的完全路径名jps –v输出jvm参数jstat -gc PID找到linux服务器上的java进程PID(主要就用这个)jstat的其他命令jstat -gccapacity PID堆内存分析jstat -gcnew PID年轻代GC分析,这里的TT和MTT可以看到对象在年轻代存活的年龄和存活的最大年龄jst

2020-07-04 20:10:29 359

原创 JVM调优参数

JVM调优参数ParNew+CMS垃圾回收器参数参数描述-Xms-XX:InitialHeapSizejava堆内存大小-Xmx-XX:MaxHeapSizejava堆内存最大大小-Xmnjava堆内存中新生代大小,扣除新生代剩下的就是老年代内存大小-XX:NewSize初始新生代大小-XX:MaxNewSize最大新生代大小-XX:PermSize-XX:MetaspaceSize永久代大小-XX:MaxPermSize-XX:Max

2020-07-04 20:02:13 161

原创 JVM调优模板

linux启动jar项目并设置参数nohup java -server -XX:NewSize=100M -XX:MaxNewSize=100M -XX:InitialHeapSize=200M -XX:MaxHeapSize=200M -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=10M -XX:MaxTenuringThreshold=15 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintGCDeta

2020-07-04 18:57:57 225

原创 ConcurrentHashMap源码分析 jdk1.7 个人理解总结

ConcurrentHashMap源码分析 jdk1.7 个人理解总结写博客是因为之前本地的笔记老是容易丢失,所以现在抽空把能找到的搬运到博客上,也是为了日后便于查看。个人理解,很可能有错误,大家批判着看ConcurrentHashMap源码分析1.数据结构:数组(Segment)+数组(table)+链表2.Segment中的HashEntry[] table 是被volatile修饰的,直接在内存上操作(确保数据可见性和正确性);Segment是静态内部类,继承了重入锁ReentranLock

2020-06-18 15:43:46 176

原创 HashMap源码分析 jdk1.7 个人理解总结

HashMap源码分析 jdk1.7 个人理解总结写博客是因为之前本地的笔记老是容易丢失,所以现在抽空把能找到的搬运到博客上,也是为了日后便于查看。个人理解,很可能有错误,大家批判着看HashMap源码分析1.数据结构:数组加链表2.构造方法:初始化容量,加载因子3.put方法:1)第一次put的时候,初始化数组,数组大小是2的幂次方,默认16(算index的时候先算key的hash值,再用&的方法取index值)2)扩容resize,新建一个数组,新数组的大小是旧数组的两倍;复制数据

2020-06-18 15:42:04 156

原创 spring源码分析笔记(5) 一些零碎的理解

spring源码分析笔记(5) 一些零碎的理解写博客是因为之前本地的笔记老是容易丢失,所以现在抽空把能找到的搬运到博客上,也是为了日后便于查看。个人理解,很可能有错误,有看到的就抱着批判的态度来看理解一加了@Configuration注解的,就setAttribute(“configurationClass”,“full”),为全配置类;没加@Configuration,不是接口,加了@Component,@ComponentScan,@Import,@ImportResource任意一种的,或者内

2020-06-18 15:36:34 88

原创 spring源码分析笔记(4)spring bean的注入

spring源码分析笔记(4)spring bean的注入写博客是因为之前本地的笔记老是容易丢失,所以现在抽空把能找到的搬运到博客上,也是为了日后便于查看。个人理解,很可能有错误,大家批判着看spring注入方式分两种(一般就是指手动注入):1.setter2.construct手动装配@Atuowried 是使用setter方式注入,源码中使用field.set方法,反射注入自动注入模型有4种 只能在xml中指定,xml注入需要指定set或者construct方法nobytypebyn

2020-06-18 15:29:47 164

原创 spring源码分析笔记(3)第三次调用后置处理器的方法:applyMergedBeanDefinitionPostProcessors

spring源码分析笔记(3)第三次调用后置处理器的方法:applyMergedBeanDefinitionPostProcessors个人理解,可能有错误第三次调用后置处理器的方法:applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);推断构造所在的方法是createBeanInstance(beanName, mbd, args),这个方法后面的方法就是这里探讨的调用后置处理器方法,功能就是找出类里面的方法和参数,用于后面

2020-06-18 15:27:26 357

原创 spring源码分析笔记(2)推断构造方法

spring源码分析笔记(2)推断构造方法个人理解,可能有错误推断构造方法 :调用后置处理器 determineConstructorsFromBeanPostProcessors 第一次推断构造方法,分几种情况:手动注入:1.如果没有提供构造方法-------推断构造为null,实例化对象默认使用无参构造2.如果提供了默认的无参构造方法-------推断构造为null,实例化对象默认使用无参构造3.如果提供了多个构造方法-------推断构造为null,实例化对象默认使用无参构造4.如果提

2020-06-18 15:25:05 224

原创 spring源码分析笔记(1)AnnotationConfigApplicationContext

spring源码分析笔记(1)这是我第一篇博客,写博客是因为之前本地的笔记老是容易丢失,所以现在抽空把能找到的搬运到博客上,也是为了日后便于查看。new AnnotationConfigApplicationContext的时候,第一步构造方法中有三步this(),register(),refresh()this()调用的是当前类的构造方法,内部创建了reader和scanner,分别是:this.reader = new AnnotatedBeanDefinitionReader(this);

2020-06-18 15:22:10 125

空空如也

空空如也

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

TA关注的人

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