review
★W★
这个作者很懒,什么都没留下…
展开
-
垃圾收集器
垃圾回收器 **串行垃圾回收器(Serial)****:**它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程。 **并行垃圾回收器(Parallel)????*多个垃圾回收线程并行工作,此时用户线程是暂停的,适用于科学计算、大数据分析等弱交互。 **并发垃圾回收器(CMS):**用户线程和垃圾线程同时执行(不一定是并行可能是交替执行),不需要停顿用户线程,互联网公司多用它,使用对响应时间有要求的场景。 **G1垃圾回收器:**G1垃圾回收器将堆内存分割成不同的区域然后并发对其进行垃圾回收原创 2021-07-04 12:04:28 · 203 阅读 · 0 评论 -
强、软、弱、虚
强软弱虚 强引用 当内存不足,JVM开始垃圾回收,对于强引用对象,就算出现OOM也不会对该对象进行回收。 强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就表明对象还“活着”,垃圾回收器不会碰这种对象,在JAVA中最常见的就是强引用,把一个对象赋给一个变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可以被垃圾回收器机制回收的,即使该对象以后永远都不会用到JVM也不会回收。因此强引用是造成内存泄漏的主要原因之一。 对于一个普通的对象,如果没有其他的引用关系原创 2021-06-30 00:08:21 · 162 阅读 · 0 评论 -
2021-06-27
垃圾回收算法 引用计数: 缺点:每次对对象赋值均要维护引用计数器,且计数器本身也有一定的消耗。 较难处理循环引用。 复制算法: a. eden,SurvivorFrom复制到SurvivorTo,年龄+1 首先当Eden区满的时候回触发第一次GC,把还活着的对象拷贝到SurvivorFrom区,当Eden区再次触发GC的时候会扫描Eden区和From区,对这两个区进行垃圾回收,经过这次回收后还活着的对象,则直接复制到To区(如果有对象的年龄已经达到老年的标准,则赋值到老年代区),同时把这些对象的年龄+1。原创 2021-06-27 22:42:17 · 62 阅读 · 0 评论 -
线程池的七大参数
线程池的七大参数 corePoolSize: 线程池中常驻核心线程数 maximumPoolSize: 线程池中能够同时执行的最大线程数,此值必须大于等于1 keepAliveTime: 多余的空闲线程的存活时间;当线程池数量抄错corePoolSize时,当空闲时间达到keepAliveTime时,多余线程会被销毁直到只剩下corePoolSize个线程为止 unit: keepAliveTime的单位 workQueue: 任务队列,被提交单尚未执行的队列 threadFactory: 表示生成线程池原创 2021-06-27 18:06:09 · 3116 阅读 · 0 评论 -
生产者消费者
生产者消费者 使用lock实现生产者消费者模式 public class ProdConsumer_TraditionDemo { public static void main(String[] args) { ShareData shareData = new ShareData(); for (int i = 0; i < 5; i++) { new Thread(() -> { try { shareData.increment(); }原创 2021-06-27 14:16:11 · 71 阅读 · 0 评论 -
synchronized 和 lock有什么区别?
synchronized 和 lock有什么区别? 原始构成不同 synchronized属于jvm层面,是java的一个关键字 lock是具体类,是api层面的锁 使用方法不同 synchronized不需要用户去手动释放锁,当synchronized代码执行完后系统会自动让线程释放对锁的占用。 ReentrantLock则需用户去手动释放锁,若没有手动释放锁,就有可能导致出现死锁的现象。需要lock和unlock方法配置try-finally语句块来完成 等待是否可中断 synchronized不可中原创 2021-06-24 23:14:27 · 149 阅读 · 0 评论