If 十只橘猫九只胖

Then 还有一只特别胖


  • 归档

  • 分类

  • 标签

  • 关于

OOM详解

发表于 2017-04-10 | 分类于 Java | | 阅读次数

OOM(OutOfMemory)是每个Javaer应该明白的东西,以前我遇到的时候就search it并调整JVM启动参数,但是具体怎么回事嘛?知道学习了并发和JVM才真正明白。

永久区内存溢出(Caused by: java.lang.OutOfMemoryError: PermGen space)

我们先来认识OOM发生的时机,写一段如下代码,不断动态地创建PermTestClass类(不是对象)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//省略类定义
public static void main(String[] args) {
test();
}
public static void test() {
while (true) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(PermTestClass.class);
enhancer.setUseCache(false);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("test");
return proxy.invoke(obj, args);
}
});
enhancer.create();//动态的创建一个PermTestClass类(不是对象)。
}
}
static class PermTestClass {
}

运行之,讲道理的话一会就会OOM。不过有个前提,PermSize应该设置的比较小,才容易观察到。否则,甚至是不会OOM,如果GC(垃圾回收)够快的话。

运行结果:
code module

运行开始时,使用jps来查看运行的java进程,然后使用jstat查看gc情况。
code module

##

redis 集群相关(摘抄)

发表于 2017-04-01 | 分类于 NoSQL | | 阅读次数

文章摘抄自redis中文官网

文中关键字:

- 分布式概念
- 集群
- 一致性特征
- 分区
- 一致性哈希,哈希槽
- 主从复制模型
- 集群是用了异步复制
- 网络分区?
- CAP理论?

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
Redis集群并不支持处理多个keys的命令??
Redis的网络分区?
Redis 集群通过**分区**来提供一定程度的可用性

Redis 集群的优势:

  1. 自动分割数据到不同的节点上。
  2. 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

redis datastruct

发表于 2017-03-31 | 分类于 NoSQL | | 阅读次数

Redis是一种key-value的基于内存数据结构存储系统,它可以用作数据库、缓存和消息中间件库。Redis有5种数据结构strings,lists,sets,sorted sets,hashes。

strings

1
2
3
4
5
6
PUT key value
GET key
DEL key
EXPIRE key time
TTL key

lists

1
2
3
4
5
6
LPUSH key value
RPUSH key value
LPOP
RPOP
LRANGE start end

sets

1
2
3
4
SADD key value
SREM key value
SISMEMBER key value
SMEMBERS key

sorted sets

1
2
3
4
5
ZADD hackers 2 Bob
ZADD hackers 1 Alan
ZADD hackers 1 Zbra
ZRANGE hackers 0 -1

hashes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
HSET user:1000 name Rick
HSET user:1000 age 38
HSET user:1000 email "rick@amc.com"
HGETALL user:1000
=> 1) "name"
2) "Rick"
3) "age"
4) "38"
5) "email"
6) "rick@gmail.com"
HGET user:1000 name => Rick
HINCRBY user:1000 age 1=> integer 39
HINCRBY user:1000 age 11=> integer 50
HDEL user:1000 age
HINCRBY user:1000 age 11=> integer 11
HMSET user:1000 name Rick age 38 email rick@amc.com

设计模式之策略模式

发表于 2017-03-27 | 分类于 设计模式Design Pattern | | 阅读次数

学习设计模式一定要学会看和画类图。

快速排序

发表于 2017-03-27 | 分类于 算法 | | 阅读次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void quickSort(int[] arr, int start, int end) {
int l = start;
int h = end;
if (l >= h) return;
int pivot = arr[start];
while (l < h) {
while (l < h && pivot < arr[h]) h--;
if (l < h) arr[l] = arr[h];
while (l < h && pivot > arr[l]) l++;
if (l < h) arr[h] = arr[l];
}
arr[h] = pivot;
quickSort(arr, start, h - 1);
quickSort(arr, h + 1, end);
}

Vim 正则表达式入门

发表于 2017-03-15 | | 阅读次数

\v可以在Vim的正则中直接开启very magic模式,使得在写正则的特殊符号时无需转义。

:g/^\s*$/d 删除所有空行。注意这里是:g,表示针对所有内容。:g/../d,这里的d是操作符,删除正则匹配的内容。
:s/(\w+)\s+(\w+)/\2\t\1 将 data1 data2 换为 data2 data1
:%s/(\w+), (\w+)/\2 \1/ 将 Doe, John 换为 John Doe
:%s/\/\=line(“.”) 将单词 id 换为 【行号.】
:%s/(^\<\w+>)/\=(line(“.”)-10) .”.”. submatch(1)
将行首的单词之前添加【lineNumber - 10.】

JUC ArrayBlockingQueue 分析(转载自并发编程网)

发表于 2017-03-14 | 分类于 Java | | 阅读次数

聊聊并发-Java中的Copy-On-Write容器(转载自并发网)

发表于 2017-03-08 | 分类于 Java | | 阅读次数

聊聊并发-Java中的Copy-On-Write容器(转载自并发网)

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。

阅读全文 »

JUC 的原子操作类AtomicReference & 与volatile的区别

发表于 2017-03-02 | | 阅读次数

volatile

volatile 常常与 synchronized 作比较,简单的说,synchronized 具有互斥性 & 可见性,而volatile 仅有可见性;可见性保证了线程间更新了之后其他线程可以马上发现更新的值。但是,volatile并不能保证多线程下变量操作的原子性。所以类似i++或者long类型的操作等,如果在volatile修饰的field上面,依然会产生脏数据。
要保证原子性,可以使用volatile + CAS的实现方式。
以下出自方腾飞《聊聊并发(一)深入分析Volatile的实现原理》

使用volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。

而这些都是Java内存模型保证的。

分离任务与多线程的封装

发表于 2017-03-01 | | 阅读次数
12
Rick Ho

Rick Ho

RickyDuoli

18 日志
4 分类
26 标签
RSS
github 并发网 weibo
基友链接
  • 梅西
  • 蒙古包
© 2013 - 2017 Rick Ho
由 Hexo 强力驱动
主题 - NexT.Muse