
jdk jvm
文章平均质量分 85
对jdk类库极其原理的介绍,java虚拟机相关知识、实践的介绍
智慧的牛
为而不有,进退有时。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AbstractQueuedSynchronizer应用之条件锁
概念导入 首先介绍一下什么是条件锁。以ArrayBlockingQueue为例子,一个线程要从队列中取元素,另一个线程要从队列中放元素,前者需要队列非空,而后者需要队列非满,这里的非空和非满就是两个条件,而且条件和动作之间需要有对对象锁的持有(否则条件改变,比如非空条件不满足了,此时再去取元素就会出错)。所以条件锁的含义是:某一个动作的完成需要满足某个条件,这个条件依赖于一个对象(...原创 2019-07-18 11:52:18 · 219 阅读 · 0 评论 -
java锁机制基类AbstractQueuedSynchronizer从设计到实现到应用(源码级剖析,总目录)
本教程从并发概念、场景分析出发,依次引出锁、等待队列等概念,直至分析清楚java锁机制实现的原理。并以java锁机制实现基类AbstractQueuedSynchronizer的实现为例,从类(核心属性、方法)设计思路,到对关键代码做注释分析,再到以流程图方式直观解释流程;最后介绍了AbstractQueuedSynchronizer的应用,即如何用它来实现并发控制,以及如何自定义并发组件。分...原创 2019-07-20 15:54:05 · 298 阅读 · 0 评论 -
AbstractQueuedSynchronizer应用之读写锁
本文的代码部分理解,建议结合视频:https://edu.youkuaiyun.com/course/play/25414/301467思路分析首先分析读写锁的需求:1、读锁状态下,可以继续加读锁,但是不能加写锁;如果有写锁在等待队列,后续请求的读锁也需要加到等待队列中。2、写锁状态下,不能加其他锁。3、读锁获得锁之后,需要通知后继节点中(在第一个写锁之前)的读锁。如何实现呢?1、第一、二...原创 2019-07-18 11:56:16 · 450 阅读 · 0 评论 -
AbstractQueuedSynchronizer初始应用之ReentrantLock
前面介绍的是排他申请锁的情况,也就是synchronized语法支持的内容。但是业务中会有更加复杂的场景,通过对tryAcquire、tryRelease的覆写以及state属性的使用,我们可以达到控制并发的目的,满足具体的场景需求。但是许多场景都是有共性的,并且直接使用这些底层的方法去实现并发,一来代码复杂,二来容易出错,所以有必要针对这些场景封装出通用的并发组件,比如Reetr...原创 2019-07-18 11:48:06 · 221 阅读 · 0 评论 -
AbstractQueuedSynchronizer从设计到实现
博客的代码部分理解,建议通过观看免费课程:https://edu.youkuaiyun.com/course/play/25414/301464概念导入 在并发编程中一个很重要的概念就是锁,本文以java中对锁的实现为例子做一个分析。我们使用锁的场景一般是这样的:在程序中需要对某些关键代码块做并发控制,只有满足条件的线程允许访问。那么这里就有这样几个概念:锁的持有线程、等待线程、调度控制中...原创 2019-07-18 11:42:25 · 462 阅读 · 0 评论 -
servlet工作原理之tomcat篇
本文要点:1、servlet容器即包含wrapper的context容器2、servelt的config、request、response、session、context等均使用了门面模式3、listener,事件监听器在tomcat启动,容器以及servlet生命周期中的应用。转载 2019-06-10 10:34:13 · 3231 阅读 · 0 评论 -
nio实战之netty实现
什么是nioio多路复用技术,把多个io的阻塞复用到同一个selector的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。适用场景:高负载、高并发原阻塞io的问题每个请求的处理都需要单独的线程(阻塞)编解码规则不统一,如果使用java提供的序列化难以跨平台,字符串大,序列化性能差3个主题传输:io模型协议线程:数据报如何读取?读取之后的编解码在哪个线程执行?编解码后的消原创 2017-06-07 13:25:05 · 7609 阅读 · 1 评论 -
一个perm永久代溢出排查过程
作者:欧洲游 1、第一反应是设置的p区内存不足,发现直接给到512m了 2、使用jmap查看存活实例大小,如果超过1m说明有一定泄漏,FGC之后看正常 3、permstat再次分析一下 jmap -permstat 8578 4、定位到WebappClassloader,占用了接近230m的内存 5、再次查看一下class的实例,实例异常高 正常的工具 6、dump内存下来,看到底加载原创 2017-06-21 19:45:05 · 5345 阅读 · 0 评论 -
缓冲区(Buffer)
##1、 概念介绍 ## 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对I/O的数据做临时存储,这部分预留的内存空间叫缓冲区。 使用缓冲区有两个好处: 1、减少实际物理读写次数 2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数 一般在实际过程中,我们一般是先将文件读入内存,再从内存写入到别的地方,这样在输入输出过程中我们都可以用缓存转载 2017-06-08 20:50:04 · 46124 阅读 · 2 评论 -
java内存分配与参数配置
一、对象优先在新生代Eden区分配堆内存大小为20M,不可自动扩展,新生代内存为10M,默认Eden区:Survivor区为8:1,Eden区为:10Mx8/10=8129KB,survivor区大小为1024KB,新生代总可用内存为9216KB。当新生代装不下时,将租借老年代的区域。二、大对象直接进入老年代-XX:PretenureSizeThreshold(只对Seri原创 2016-03-27 20:57:05 · 2195 阅读 · 1 评论