1.常用的垃圾回收器
1.1 新生代收集器(都是采用复制算法):单线程收集器、多线程收集器、多线程收集器(可以控制回收时间+可以控制回收的吞吐量)
1.2 老年代收集器:单线程收集器(采用标记整理算法)、最短回收停顿时间并发线程(有四个步骤:1.初始标记、2.并发标记、3.重新标记、4.并发清除)、多线程收集器(可以控制回收时间+可以控制回收的吞吐量)
1.3 堆收集:收集范围是整个堆内存
2.jvm常用参数:xms(初始堆大小)、xmx(最大堆大小)、xmn(新生代内存大小)、xss(线程堆栈大小)
3.创建线程的方式以及他们的区别:
3.1 实现runnable接口:通过thread调用start方法来启动线程,没有返回值
3.2 实现callable接口:通过thread调用start方法来启动线程,有返回值
3.3 继承thread类:java不支持多继承类,继承了thread类就不能再继承其他类,开销过大
4.线程的生命周期:
新建、就绪、运行、阻塞、死亡
5.多线程常用的方法:
1. start():启动线程,调用run方法;yield():把执行状态修改为就绪状态;sleep()休眠;join()阻塞;wait()等待;deamon():守护线程,当所有线程结束,守护线程最后也结束;
2. sleep和wait的区别:1.sleep是thread对象,wait是object对象;2.sleep不需要释放锁,wait需要释放锁;3.wait需要synchronized关键字,sleep不需要
6.线程池的作用:
1.控制并发数量,管理线程;2.线程的复用,避免重复创建或销毁线程;3.管理线程的生命周期
7.线程池的7大参数:1.corePoolSize核心线程数 2.maxinumPoolSize最大线程数 3.keepAliveTime多于空闲线程存活时间 4.unit空闲时间单位 5.workQueue 任务队列 6.threadFactory线程工厂 7.handler拒绝策略
7.executors(创建线程池的工具类)创建线程池的常用方法:
1.newSingleThreadExecutor:创建一个单线程的线程池。这个线程池中只有一个线程在工作,即相当于单线程串行执行所有任务;如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。任务的执行顺序按照任务的提交顺序执行。
2.newCachedThreadPool:创建一个缓存池大小可根据需要伸缩的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步执行的程序而言,这些线程池可提高程序性能。
3.newFixedThreadPool(int n):创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程
4.ScheduledThreadPool:带定时任务的线程池