Java杂记(一)

133 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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

》》》未完待续。。。。