持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
一、线程跑配置核心线程数获取CPU核数
public ThreadPoolExecutor(
int corePoolSize,//线程池里的核心线程数量
int maximumPoolSize,//线程池里允许有的最大线程数量
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
//...
}
获取逻辑核心数,如6核心12线程,那么返回的是12
CPU核数 = Runtime.getRuntime().availableProcessors()
CPU密集型:核心线程数 = CPU核数 + 1
IO密集型:核心线程数 = CPU核数 * 2
二、Linux获取CPU核数
总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
查看物理CPU个数: cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数): cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数: cat /proc/cpuinfo| grep "processor"| wc -l
三、不可变集合
ImmuableList是不可变集合,线程安全的集合,开始传入对象的一个副本。
eg: ImmutableSet imSet=ImmutableSet.of("peida","jerry","harry","lisa");
set直接转list ImmutableList imlist=ImmutableList.copyOf(imSet); System.out.println("imlist:"+imlist);
list直接转SortedSet ImmutableSortedSet imSortSet=ImmutableSortedSet.copyOf(imSet);
截取集合部分元素 ImmutableList imInfolist=ImmutableList.copyOf(list.subList(2, 8));
四、Redis 的淘汰算法有四种
随机:随机移除某个key;
TTL:设置了过期时间的键里面,找到更早过期的时间key进行有限的移除;
LRU:(Least Recently Used,最近最少使用);
LFU:(Least Frequently Used,最不经常使用)。
五、JVM虚拟机参数设置
初始堆大小,默认物理内存的1/64: -Xms -Xms512M
最大堆大小,默认物理内存的1/4: -Xmx -Xms2G
新生代内存大小,官方推荐为整个堆的3/8: -Xmn -Xmn512M
设置新生代和年老代的比值: -XX:NewRatio=n -XX:NewRatio=3
如: 3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
年轻代中Eden区与两个Survivor区的比值: -XX:SurvivorRatio=n -XX:SurvivorRatio=8
注意Survivor区有两个。如: 8,表示Eden:Survivor=8:1:1,一个Survivor区占整个年轻代的1/10
永久代初始值,默认为物理内存的1/64: -XX:PermSize=n -XX:PermSize=128M
永久代最大值,默认为物理内存的1/4: -XX:MaxPermSize=n -XX:MaxPermSize=256M
开启普通对象指针压缩: -XX:+UseCompressedOops
开启类指针压缩: -XX:+UseCompressedClassPointers
打印GC详情: -XX:+PrintGCDetails
可以设置大对象的大小,如果对象超过设置大小会直接进入老年代,不会进入年轻代: -XX:PretenureSizeThreshold
使用Serial垃圾回收器: -XX:+UseSerialGC
G1调优参数:
开启G1:
-XX:+UseG1GC
最大GC暂停时间:
-XX:MaxGCPauseMillis
六、Spring内置重要的类:
-
1、ConfigurableListableBeanFactory : BeanFactory配置清单,指定忽略类型及接口等。
-
2、DefaultListableBeanFactory:是整个bean加载的核心,是spring注册及加载bean的默认实现;继承ConfigurableListableBeanFactory。
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {}
-
3、BeanDefinition :描述bean的类,该实例具有属性值。
-
4、BeanDefinitionRegistry:具有增,查,删BeanDefinition的能力。一次只能注册一个BeanDefinition。
实现类SimpleBeanDefinitionRegistry,DefaultListableBeanFactory,GenericApplicationContext等。一般实现类里都都有一个
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap()
来存储BeanDefinition。
-
5、BeanFactory:是一个工厂用来存储和创建bean的。
-
6、FactoryBean:是spring提供的一个特殊的bean,实现此接口的bean可以往spring容器中添加一个bean; 可以发现IndexFactoryBean注册到spring容器中的对象是IndexDao,这就是spring中FactoryBean提供的功能。FactoryBean中getObject()方法可以返回一个对象,spring容器初始化的过程中会将getObject()返回的对象添加到spring容器中。
-
7、BeanFactoryPostProcessor:BeanFactoryPostProcessor 工厂后置处理器,它是在工厂初始化完成之后调用,它可以对bean进行修改,是spring提供的一个扩展点。postProcessBeanFactory()方法将factory传入进去了,可以通过factory进行操作。 执行时机:工厂初始化完成之后,在bean被创建成对象之前执行;
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
- 8、BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子类,对BeanFactoryPostProcessor进行了扩展接口,
void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
传入registry意味着可以利用registry向容器中添加bean。
- 9、BeanPostProcessor:bean后置处理器,会在bean初始化完成之后回调该接口的方法。 执行时机:bean对象创建完成,还未放入容器中时执行;
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
postProcessBeforeInitialization方法会在postProcessAfterInitialization之前回调,值得注意的是postProcessAfterInitialization方法的回调是在所有的BeanPostProcessor的postProcessBeforeInitialization方法执行完成之后。
六、mysql动态查询字段
参数:穿入待查询字段集合:@Param("fields") List fields
select
ifnull(${field},'') as ${field}
from t_equipment
》》》未完待续。。。。