- 博客(11)
- 资源 (2)
- 收藏
- 关注
转载 数据库分库分表策略
作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段。简单地说,Sharding就是将原来单一数据库按照一定的规则进行切分,把数据分散到多台物理机(我们称之为Shard)上存储,从而突破单机限制,使系统能以Scale-Out的方式应对不断上涨的海量数据,但是这种切分对上层应用来说是透明的,多个
2016-08-25 16:29:55 2496
转载 Java HashMap的hash算法
HashMap 中hash table 定位算法: Java代码 int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); 其中indexFor和hash源码如下: Java代码 /** * Applies a supplemen
2016-08-25 10:22:07 1278 1
转载 Java HashMap的hash函数实现
Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。 1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构
2016-08-25 10:15:55 2188
原创 Java ReentrantLock(重入锁)带来的改变
前言ReentrantLock称为重入锁,它比内部锁synchronized拥有更强大的功能,它可中断、可定时,JDK5中,在高并发的情况下,它比synchronized有明显的性能优势,在JDK6中由于jvm的优化,两者差别不是很大。synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别
2016-08-24 11:03:32 468
原创 JVM调优(四)常用调优方案
将新对象预留到新生代由于Full GC的成本要远远高于Minor GC,因此尽可能的将对象分配在新生代是一项明智的选择。 大部分情况下,jvm会尝试在eden区域分配对象,但是因为空间紧张等问题,很可能不得不将部分年轻对象提前向老年代压缩。因此,可以为程序分配一个合理的新生代空间,以最大限度避免新对象直接进入老年代的情况。一般来说,当survivor区的空间不够,或者占用量达到50%时
2016-08-23 10:37:46 511
原创 JVM调优(三)垃圾收集
前言垃圾收集器要处理的基本问题是:哪些对象需要回收?何时回收这些对象?如何回收这些对象?回收算法复制算法(copying)标记-压缩算法(mark-compact)
2016-08-22 17:22:59 276
原创 JVM调优(二)JVM内存分配参数
设置最大堆内存-Xmx参数指定。最大堆是新生代和老年代的大小之和的最大值,他是java应用程序的堆上限。使用-Xmx可以设置系统的最大堆。设置最小堆内存使用-Xms可以设置系统的最小堆空间,也就是jvm启动时,所占据的操作系统的内存大小。设置新生代设置持久代设置线程栈
2016-08-22 16:29:12 387
原创 关于volatile和cas
cas描述:CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。这个旧的预期值是什么意思?V是内存值,B是要程序即将要存入内存的值,但这个旧的预期值A,是什么意思,程序如何知道预期值?一个线程间共享的变量,首先在主存中会保留一份,然后每个线程的工作内存也会保留一份副本。这里说的预期值,就是线程保留的副本。当该
2016-08-18 14:16:55 1492
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人