随笔分类 -  L编程高级

摘要:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heapmemory)”。可以看出JVM主要管理两种类型的内存:堆和非堆 阅读全文
posted @ 2020-08-25 10:51 光何 阅读(16000) 评论(0) 推荐(2) 编辑
摘要:1,年轻代、年老代、永久代 根据对象的生命周期的长短,把对象分成不同的种类,并分别进行内存回收,这就是分代垃圾回收。 分代垃圾回收算法的主要思路:把堆分成两个或者多个子堆,每一个子堆被视为一代。在运行的过程中,优先收集那些年幼的对象,如果一个对象经过多次收集仍然存活,那么可以把这个对象转移到高一级的 阅读全文
posted @ 2020-08-19 17:24 光何 阅读(393) 评论(0) 推荐(0) 编辑
摘要:为了便于管理,JVM在执行java程序的时候,会把它所管理的内存划分为多个不同区域。 1,class文件 class文件是java程序编译后生成的中间代码,这些中间代码将会被JVM解释执行。 2,类装载器子系统 类装载器子系统负责把class文件装载到内存中,供虚拟机执行。JVM有两种类装载器,分别 阅读全文
posted @ 2020-08-19 15:15 光何 阅读(171) 评论(0) 推荐(0) 编辑
摘要:BIO使用同步阻塞的方式工作,而NIO则使用的是异步阻塞的方式。对于NIO而言,它最重要的地方是当一个链接被创建后,不需要对应一个线程,这个连接会被注册到多路复用器上面,所以所有的连接只需要一个线程管理,当这个线程中的多路复用器进行轮询的时候,发现连接上游请求的话,才开启一个线程进行处理,也就是一个 阅读全文
posted @ 2020-08-19 11:13 光何 阅读(775) 评论(0) 推荐(0) 编辑
摘要:1,IO IO即input和output的缩写,在java语境里,通常表达的是数据的流入和流出。 流是指数据的无结构化传递,以无结构字节序列或者字符序列进入输入和输出。IO流即是进行输入和输出操作的流。 字节流的最小操作单位是一个字符,字符即是字节加上编码表,单个字符占用1到多个字节。 2,BIO 阅读全文
posted @ 2020-08-18 17:24 光何 阅读(844) 评论(0) 推荐(0) 编辑
摘要:多线程、单线程、同步、异步、阻塞、非阻塞,都是独立的概念,只是在多数应用场景下,它们看上去一致了,所以造成了概念的混淆。 1,在多线程语境下的概念 在多线程语境下,用于描述任务的线程访问执行机制,同步和异步关注的是任务是否可以被同时调用,阻塞和非阻塞则关注的是线程的状态。 同步:指代码的同步执行(s 阅读全文
posted @ 2020-08-18 09:05 光何 阅读(201) 评论(0) 推荐(0) 编辑
摘要:1,CopyOnWriteArrayList CopyOnWriteArrayList是java1.5版本提供的一个线程安全的ArrayList变体,ArrayList具有fast-fail特性,它是值在遍历过程中,如果ArrayList的内容发生过修改,那么会抛出ConcurrentModific 阅读全文
posted @ 2020-08-17 10:13 光何 阅读(903) 评论(0) 推荐(0) 编辑
摘要:1,Latch java.util.concurrent.CountDownLatch经常被称为闭锁,它能够使指定线程等待计数线程完成各自工作后再执行。如果提供一个计数为2的CountDownLatch,每执行完一个线程就调用latch的countDown方法把计数器减1,等全部任务执行完成后,la 阅读全文
posted @ 2020-08-16 15:12 光何 阅读(223) 评论(0) 推荐(0) 编辑
摘要:1,Future java.util.concurrent.Future接口提供了线程不会因为等待返回结果而阻塞的能力。 设想一个生活场景,用于需要申请车牌,它在提交了申请之后,与长达数小时的等待过程,在这个过程里,用户可以做自己想做的其他事情,而无需一直在窗口等待车牌制作完成。 在这个过程中,用于 阅读全文
posted @ 2020-08-14 15:10 光何 阅读(653) 评论(0) 推荐(0) 编辑
摘要:在java语言中,可以通过new Thread的方法来创建一个新的线程执行任务,但是线程的创建是非常耗时的,而且创建出来的新的线程都是各自运行,缺乏统一的管理,这样做的后果可能是导致创建过多线程从而过度消耗系统资源,最终导致性能急剧下降,线程池的引入就是为了解决这个问题。 当使用线程池控制线程数量时 阅读全文
posted @ 2020-08-14 14:21 光何 阅读(410) 评论(0) 推荐(0) 编辑
摘要:Executor框架集对线程的调度进行了封装,它把任务的提交与执行进行了解耦,同时,还提供了线程生命周期调度的所有方法,大大简化了线程调度和同步的门槛。 1,Executor接口 java.util.concurrent.Executor是一个接口,这个接口只定义了一个方法execute用于执行已经 阅读全文
posted @ 2020-08-14 11:21 光何 阅读(254) 评论(0) 推荐(0) 编辑
摘要:DelayQueue是一种延迟队列,它所管理的对象必须实现java.util.concurrent.Delayed接口,该接口提供了一个getDelay方法,用于获取剩余的延迟时间,同时该接口继承自Comparable,其compareTo的实现体一般用于比较延迟时间的大小。 DelayQueue是 阅读全文
posted @ 2020-08-13 10:31 光何 阅读(153) 评论(0) 推荐(0) 编辑
摘要:ConcurrentLinkedQueue是一种非阻塞的线程安全队列,与阻塞队列LinkedBlockingQueue相对应,ConcurrentLinkedQueue同样也是使用链表实现的FIFO队列,但不同的是它没有使用任何锁机制,而是用CAS来实现线程安全。 1,成员变量 1 //头结点,tr 阅读全文
posted @ 2020-08-13 09:30 光何 阅读(1371) 评论(0) 推荐(0) 编辑
摘要:优先级阻塞队列PriorityBlockingQueue,不是FIFO队列,他要求使用者提供一个Comparetor比较器,或者队列内部元素实现Comparable接口,队头元素会是整个队列里的最小元素。 PriorityBlockingQueue的优先级特性的实现方式和PriorityQueue的 阅读全文
posted @ 2020-08-12 14:14 光何 阅读(392) 评论(0) 推荐(0) 编辑
摘要:LinkecBlockQueue链表阻塞队列,从命名可以看出,它是基于链表实现的。同样这也是个先进先出的队列,队头是队列里入队时间最长的元素,队尾则是入队时间最短的。理论上它的吞吐量要超出数组阻塞队列ArrayBlockingQueue。LinkedBlockQueue可以指定容量限制,在没有指定的 阅读全文
posted @ 2020-08-12 08:52 光何 阅读(680) 评论(0) 推荐(0) 编辑
摘要:1,BlockingQueue 生产者-消费者模型即有界缓存模型,生产者线程在仓库装满之后被阻塞,消费者线程则在仓库清空后阻塞。 它包括三个基本部分: 1) 产品仓库,用于存放产品。 2) 生产者,生产出来的产品存入仓库。 3) 消费者,消费仓库里的产品。 java.util.concurrent. 阅读全文
posted @ 2020-08-11 15:13 光何 阅读(381) 评论(0) 推荐(0) 编辑
摘要:ReentrantLock和synchronized同样都是用于多线程同步,它们在功能上有相近之处,但通常而言,ReentrantLock可以用于替代synchronized。 1, ReentrantLock具备synchronized功能 1 static Object monitor = ne 阅读全文
posted @ 2020-08-11 09:42 光何 阅读(632) 评论(0) 推荐(0) 编辑
摘要:重入锁,又称递归锁,是指在同一线程中,外部方法获取锁后,内层递归方法仍然可以获取该锁。如果锁不具备重入性,那么当一个线程两次获取锁的时候就会发生死锁。java提供了java.util.concurrent.ReentrantLock来解决重入锁问题。 ReentrantLock重入锁并不是容器集合类 阅读全文
posted @ 2020-08-10 15:15 光何 阅读(2198) 评论(0) 推荐(0) 编辑
摘要:AQS的原理在于,每当有新的线程请求资源时,该线程会进入一个等待队列(Waiter Queue),只有当持有锁的线程释放资源后,该线程才能持有资源。该等待队列的实现方式是双向链表,线程会被包裹在链表节点Node中。Node即队列的节点对象,它封装了各种等待状态(典型的状态机模式),前驱和后继节点信息 阅读全文
posted @ 2020-08-09 11:29 光何 阅读(1482) 评论(0) 推荐(0) 编辑
摘要:1,AQS java.util.concurrent包的核心类是AbstractQueuedSynchronizer,AQS是一个同步器+阻塞锁的基本架构,用于控制加锁和释放锁,并在内部维护一个FIFO的线程等待队列。 AbstractOwnableSynchronizer是一个可以由线程以独占方式 阅读全文
posted @ 2020-08-08 15:29 光何 阅读(799) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示