- 浏览: 4688 次
- 性别:
- 来自: 杭州
最新评论
文章列表
一、程序计数器
在JVM的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等基础功能都需要依赖这个计数器来完成。由于JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的。因此,为了线程切换后能恢复到正确的执行位置,每个线程需要有一个独立的程序计数器。如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的JVM字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。
二、JVM栈
1. JVM栈描述的是java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Sta ...
一、ZooKeeper简介&特性
ZooKeeper是一个开源分布式协调服务系统,独特的Leader-Follower的集群结构,很好地解决了分布式单点问题。目前主要应用场景
(1)统一命名服务
(2)配置管理
(3)分布式锁服务
(4)集群管理
1. 一些基本概念
(1)角色
a. Leader
b. Follower
c. Observer
(2)数据单元:Znode(Path)
统一命名空间中的数据单元,形象点来理解的话,就是文件路径树中的一个个节点,相当于一个文件或者一个目录
(3)监听器:Watcher
2. 数据模型和层级命名空间
ZooKeeper提供的命名空间极像一个标准 ...
java内存运行时区域的各个部分中,程序计数器、JVM栈、本地方法栈这三个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑内存回收的问题,因为方法结束或线程结束时,内存自然就随着回收了。而java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的。
一、判定对象已经死亡的算法
1. ...
一、系统常用工具
1. netstat
查看系统通信端口以及网络连接状态等等信息,常用参数为 -t(tcp通信端口及连接) -u(udp通信端口) -n(直接显示IP地址和端口号,不做名字解析) -a
2. ps
(1)查看系统进程/线程信息
(2)常用参数为 -ef(显示所有进程) -eLf(显示所有线程)
(3)常见用法为:ps -eLf|grep java -c(查看java线程数); ps -ef|grep java(查看java进程信息)
3. wc
(1)用于统计指定文件中的字节数、单词数或者行数等等信息
(2)常用参数为 -l(统计行数) -c(统计字节数) -w(统计单词数)
4 ...
第1章 引言
1. 代码应该被重用,而不是被拷贝
2. 模块之间的依赖性尽可能降到最小
3. Java语言支持四种类型:接口、类、数据和基本类型
4. 类的成员由它的field、method、member class和member interface组成
5. 方法签名(signature)由它的 ...