
Java
文章平均质量分 50
nieyanshun_me
这个作者很懒,什么都没留下…
展开
-
ReentrantLock锁的可中断性
此文只是为了记录,先上代码class BlockedMutex { private Lock lock = new ReentrantLock(); public BlockedMutex() { this.lock.lock();// mian线程持有了这个锁 System.out.println(Thread.curren原创 2015-08-18 13:52:35 · 2432 阅读 · 0 评论 -
JDK中hash冲突解决的两种方法
哈希表定义散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。 也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。 这个映射函数称做散列函数,存放记录的数组称做散列表。实现关键点hash函数 hash冲突解决首先来说hash函数,java中对象都已一个hashCode() 方法,那为什么还原创 2017-06-28 16:31:30 · 2367 阅读 · 0 评论 -
静态文件编码的一个坑(freemarker)
今天遇到一个很奇怪的乱码问题,从早上忙到了现在,终于找到了原因,做下记录。问题大概是这样的,我用ftl生成xml文件,在一些ftl中存在汉字,渲染后的xml中,静态的汉字,会有个别字乱码(不是全部,是不是好奇怪)。进行排错,首先猜测,我的文件编码格式有问题,因为我用的windows系统,编码默认GBK,猜测有可能是使用了GBK编码,将源文件在vim下,:set fileecoding,结果为ut原创 2017-03-08 15:23:30 · 485 阅读 · 0 评论 -
强引用、软引用、弱引用
强引用:关于强引用这里不用多说Object obj = new Object(); 这里就是强引用。软引用:SoftReference<Object> obj = new SoftReference<Object>(new Object()); 强引用只有在内存不够的时候才会被回收。弱引用:WeakReference,一次gc之后原有对象即被回收。测试用例如下: /*原创 2017-06-28 13:23:54 · 272 阅读 · 0 评论 -
spring之aop方法内部调用问题
现象描述:假设有一个service,其中有A B 两个方法,A B都被aop托管,且A中调用了B方法,这时请求方法A的时候只会触发A的aop逻辑而不会触发B的aop逻辑。public interface UserService { void test();} public class UserServiceImpl implements UserService { @Overri原创 2017-07-09 21:20:48 · 8946 阅读 · 4 评论 -
分库分表
根据id进行分库分表,一般套路是取id上的几位,取模得库表后缀。比如,我们有256个分库,8192张分表(256*32),即每个库32张分表,那么计算方式如下:对于库: (id%8192)/32,先计算出哪个表,在根据表得出库坐标对于表: (id%8192)...原创 2018-06-22 17:07:35 · 317 阅读 · 0 评论 -
Understanding GC pauses in JVM, HotSpot's minor GC.
Stop the world pauses of JVM due to work of garbage collector are known foes of java based application. HotSpot JVM has a set of very advanced and tunable garbage collectors, but to find optimal confi...转载 2018-07-03 14:47:30 · 286 阅读 · 0 评论 -
Understanding GC pauses in JVM, HotSpot's CMS collector.
Concurrent Mark Sweep (CMS) is one of HotSpot JVM low pause garbage collectors. CMS can do most of its work for reclaiming memory concurrently with application (without stopping it). But still it requ...转载 2018-07-03 14:48:50 · 256 阅读 · 0 评论 -
Java问题排查工具
1.psps aux|grep java 获取java进程id2.jstat 一条命令就够了jstat -gcutil pid 1000 1000 两个数值分别为时间间隔和监听次数 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 8.76 0.00 50.32 1...原创 2018-07-03 20:33:07 · 321 阅读 · 0 评论 -
关于TCP 半连接队列和全连接队列
关于TCP 半连接队列和全连接队列发表于 2017-05-25 | 作者 蛰剑 | 分类于 网络 | 最近碰到一个client端连接异常问题,然后定位分析并查阅各种资料文章,对TCP连接队列有个深入的理解查资料过程中发现没有文章把这两个队列以及怎么观察他们的指标说清楚,希望通过这篇文章能把他们说清楚一点问题描述JAVA的client和serv...转载 2018-10-26 23:22:01 · 282 阅读 · 0 评论 -
Metaq原理与应用
Metaq原理与应用 (针对2.X版本) 誓嘉 兰生 2013/1/13 目录1 前言2 特别说明3 专业术语4 消息系统需要解决哪些问题?4.1 Publish/Subscribe4.2 ...转载 2018-11-17 22:34:37 · 631 阅读 · 0 评论 -
揭秘内存屏障
转载自http://wiki.jikexueyuan.com/project/disruptor-getting-started/storage-barrier.html原文地址:http://ifeve.com/disruptor-memory-barriers/最近我博客文章更新有点慢,因为我在忙着写一篇介绍内存屏障(Memory Barries)以及如何将其应用于Disruptor...转载 2019-03-03 16:51:44 · 468 阅读 · 0 评论 -
Epoll在Nio中的实现
java nio 和epoll实现原创 2016-09-01 11:18:47 · 4535 阅读 · 0 评论 -
我读过的最好的epoll讲解--转自”知乎“
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要转载 2016-07-24 22:49:58 · 317 阅读 · 0 评论 -
ReentrantLock源码学习
上文学习了JUC的AQS工具,下面看下可重入显示锁的实现(如何基于AQS),要看ReentrantLock,还是先看下显示锁内部对AQS的几种子类实现。 abstract static class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = -517原创 2015-12-25 13:46:33 · 361 阅读 · 0 评论 -
什么是java线程的中断(转)
线程状态 Java虚拟机将线程运行过程分成四种状态 。 (1) New 新生;(2) Runnable 可运行;(3) Blocked 阻塞;(4) Dead 死亡。 值得注意的是: 线程的可运行状态并不代表线程一定在运行(runnable != running ) 。 大家都知道:所有现代桌面和服务器操作系统都使用了抢占式的线程调度策略 。 一旦线转载 2015-08-18 11:16:08 · 469 阅读 · 0 评论 -
多线程:线程状态、synchronized关键字、读写锁、条件对象、Volatile、阻塞队列等小结
多线程:线程状态、synchronized关键字、读写锁、条件对象、Volatile、阻塞队列等小结关于多线程,在这里做下总结,也方便以后自己查阅。线程和进程的关系应该都知道了,这里不细说。在线程出现以前,进程是资源分配和处理机调度的基本单位,有了线程以后,进程只是资源分配的单位,而线程是处理机调度的单位。进程只分配资源,线程不分配或者说只包含极少的必要的资源。进程之下有线程,线程共享进程的资原创 2015-08-12 22:45:38 · 1523 阅读 · 0 评论 -
关于Java集合的小抄
在尽可能短的篇幅里,将所有集合与并发集合的特征,实现方式,性能捋一遍。适合所有"精通Java"其实还不那么自信的人阅读。不断更新中,请尽量访问博客原文。 ListArrayList以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为转载 2015-08-20 09:59:51 · 397 阅读 · 0 评论 -
Java免锁数据结构
今天看到一本书上讲Java中的免锁数据结构,看了下CopyAndReadList的实现,发现是读操作不加锁,写操作每次新建一个容量+1的副本,加锁,最后替换。用的都是ReentrantLock,感觉明明用了显示锁为什么说是免锁的,查了下定义,如下:Lock-free data structuresFor a data structure to qualify as lock-free, m原创 2015-08-19 21:57:21 · 1303 阅读 · 0 评论 -
JVM 内存参数设置
一、本地环境中JVM参数设置: 在本地环境变量中New一个JAVA_OPTS变量名: variable name: JAVA_OPTS variable value: -Xms256M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M二、eclipse中JVM参数设置: 打开eclipse-窗口-首选项-J转载 2015-12-12 15:16:28 · 386 阅读 · 0 评论 -
Class字节码内容学习
今天看了一下class文件的字节码内容,做个记录。先看下java的文件:class TestClass{ private int m; public static int lala = 2; public int inc(){ return m+1; } }class SubClass extends TestClass{ private int b=0; privat原创 2015-12-13 10:24:58 · 1030 阅读 · 0 评论 -
JDK7和JDK8中HashMap的结构优化
JDK对HashMap做了较大的改动和优化,在以前的HashMap上,是通过hash映射+装填因子来实现的,每个桶都接了相应的链表,当hash映射不均匀,大量key都映射到同一个桶下的链表里,这时候,元素数量和size比值达到装填因子,可以认为此时冲突较大。原创 2015-12-21 17:04:42 · 1103 阅读 · 1 评论 -
JDK8之HashSet
先上一张从网上找到的图片,这张图片概括了集合框架的结构。上篇文章,对比说明了HashMap的实现以及在7和8两个版本中的区别,下面我们继续看下JDK8中HashSet的实现。HashSet拥有两个成员变量 private transient HashMap map; // Dummy value to associate with an Object in the backi原创 2015-12-22 14:07:08 · 1608 阅读 · 0 评论 -
JUC结构图
转载 2015-12-22 15:19:25 · 1202 阅读 · 0 评论 -
自旋锁、排队自旋锁、MCS锁、CLH锁
自旋锁(Spin lock)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。简单的实现import java.util.concurrent.atomic.AtomicReference;public class SpinLock转载 2015-12-23 14:57:43 · 313 阅读 · 0 评论 -
JUC包之AbstractQueuedSynchronizer源码学习
AQS是JUC包的基础,几乎所有的JUC工具类,都是用了AQS进行实现,AQS使用了CLH lock的队列作为基础,关于CLH,前文有一篇转载的又说到什么事CLH lock,AQS中的CLH,其实就是一个FIFO的队列,队列中的每个结点(线程)只要等待其前继释放锁就可以了。这是JDK内画的 一张图: * * +------+ prev +-----+ +原创 2015-12-24 09:47:00 · 569 阅读 · 0 评论 -
阿里巴巴-淘系技术部-20应届生招聘
原创 2019-08-08 19:20:05 · 1299 阅读 · 0 评论