- 浏览: 7277 次
最新评论
文章列表
《Java并发编程的艺术》读书笔记四
- 博客分类:
- JVM
数组的可见性,与 数组元素 的可见性,是否是一回事?
比如private volatile int[] data;
这里的volatile,是保证data字段的可见性,那对于data里的元素,比如data[18],是否也有volatile的语义呢?
看如下代码
package learn.concurrency.jcip;
import java.util.concurrent.TimeUnit;
public class VolatileArrayTest {
private volatile int[] data;
publ ...
《Java并发编程的艺术》读书笔记三
- 博客分类:
- JVM
synchronized的解析
synchronized是使用对象作为mutex的,按照之前的介绍,相关信息存储在mark字段中,具体参考前面的描述。
这里分析一种简单的场景,2个线程基于同一个对象进行同步,跟踪下具体的sys call。
源码如下:
public class ...
《Java并发编程的艺术》读书笔记二
- 博客分类:
- JVM
java的对象构成
对于JVM来说,构造JAVA对象时,是以oops-klass二分模型来构建的,其中oops表示对象的相关信息。
基本结构如下:
class oopDesc {
friend class VMStructs;
private:
volatile markOop _mark;
union _metadata {
wideKlassOop _klass;
narrowOop _compressed_klass;
} _metadata;
对于数组来说,其结构如下:
class arrayOopDesc : public ...
《Java并发编程的艺术》读书笔记一
- 博客分类:
- JVM
上下文切换
线程执行时需要分配CPU资源,CPU按照时间片分给线程执行,在线程时间片用完的情况下,需要保存现场,将执行权转让给其他线程。当该线程重新有机会执行时,需要加载之前的现场信息,然后执行。
从保存现场 到下次加载执行, 就是一次上下文切换,英文叫: context switch
在linux中,可以通过vmstat来查看系统的context switch次数:
System
in: The number of interrupts per second, including the clock.
cs: The number of contex ...
第3章
Session的处理注意点:
如果session不再需要使用,需要立刻close
CONNECTIONLOSS
客户端与zk service的连接断开,也就是TCP连接已经断开了。这时候如果进行原语操作,比如create等,就会出现CONNECTIONLOSS。
CONNECTIONLOSS的出现,会引起不确定的问题:即:之前的原语操作是否成功, 有如下3种情况:
1. 原语操作还没有发给服务端
2. 原语操作已经发给服务端,但是服务端还未执行
3. 原语操作已经发给服务端,服务端也执行了,但是客户端没有收到结果
因此应用在处理CONNECTIONLOSS时,需要容错这3 ...
ZK in action笔记一
- 博客分类:
- ZooKeeper
第2章
简介
ZK提供了一些简单的操作原语,对于具体的案例实现,需要自己实现,比如分布式锁。这里的案例称为recipe
ZK的数据以tree来展示,每个节点成为znode
ZK提供的操作原语:
create /path data Creates a znode named with /path and containing data
delete /path Deletes the znode /path
exists /path Checks whether /path exists
setData ...
HSDIS对volatile的浅析
- 博客分类:
- JVM
HSDIS有什么用?用来看汇编,有用么? 答案是有用的。
举个最简单的例子,volatile,是java关键字,那在汇编层面是如何做的呢?
示例代码:
import java.util.*;
public class VolatileTest {
public volatile long value = 0;
public static void main(String[] args) {
VolatileTest t = new VolatileTest();
t.value = 3;
...
root@ubuntu:~/Downloads# ./jdk1.6.0_45/bin/java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints HelloWorld
Hello OpenJDK
-1
root@ubuntu:~/Downloads# ./jdk1.6.0_45/bin/java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+DebugNonSafepoints HelloWorld
Hello Open ...
[root@localhost ~]# java -server -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.2.el7_0-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
[root@localhost ~]# java -server -Xint -version
java version "1.7.0_75"
OpenJDK Runtime Environ ...