- 博客(153)
- 收藏
- 关注
Linux内存:内存管理的实质
1. 内核初始化: * 内核建立好内核页目录页表数据库,假设物理内存大小为len,则建立了[3G--3G+len]::[0--len]这样的虚地址vaddr和物理地址paddr的线性对应关系; * 内核建立一个page数组,page数组和物理页面系列完全是线性对应,page用来管理该物理页面状态,每个物理页面的虚地址保存在page->virtual中; * ...
2010-04-13 08:49:30
195
深入C++的new
“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A{...
2010-04-12 10:31:52
241
Linux 的多线程编程
本文们针 Linux 线程编程主特性总结出 5 条经验,以改善 Linux 线程编程习惯避免其陷阱。本文,们穿插些 Windows 编程例以比 Linux 特性,以加深读印象。 背景 Linux 线程程序相应其(比如 Windows)线程 API 有些细微隐晦差别。不注意这些 Linux 些陷阱,常常致程序问题不穷,死锁不断。本文们从 5 个方面总结出 Linux 线程编程...
2010-04-12 09:32:03
235
Java类的初始化过程详解
java是多线程的,所以类或者接口的初始化要求仔细的同步,因为同时某个别的线程可能正在试图初始化同一个类或者接口,也有可能作为类或者接口初始化的一部分,要求递归地初始化该类或接口。 要了解类的初始化过程,首先要知道Class对象的状态,class对象的状态有以下几种: 1、被检验和准备,但是没有被初始化; 2、正在被某个特殊的线程T初始化; 3、被完整地初始化并...
2010-04-11 17:09:17
177
jvm 字节码中文含义
栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将i...
2010-04-08 11:31:47
246
诡异的JVM Crash之EXCEPTION_STACK_OVERFLOW
关于JVM的一个常识是:如果对象被意外地持有很容易造成内存泄漏,而如果同时又在不停地生成新对象,就有很大的机率造成内存溢出。通常情况下,这种溢出会导致JVM抛出OutOfMemoryError,然后JVM挂起。可是来试试下面的代码,真是让人有点诧异,分别在JDK1.4、JDK5、JDK6上都表现一致。package crash;public class JVMCrashTe...
2010-04-08 11:08:03
356
浅析Linux下core文件
当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。何谓core文件当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。...
2010-04-08 10:32:23
127
Linux下的CPU利用率计算原理详解
我们在搞性能测试的时候,对后台服务器的CPU利用率监控是一个常用的手段。服务器的CPU利用率高,则表明服务器很繁忙。如果前台响应时间越来越大,而后台CPU利用率始终上不去,说明在某个地方有瓶颈了,系统需要调优。这个是即使不懂技术的人都容易理解的事情。上面理解对吗?我个人觉得不十分准确。这个要看后台你测试的进程是什么类型的。如果是计算密集型的进程,当前端压力越来越大的时候,很容易把CPU利用...
2010-04-07 17:13:16
296
jvm 初始化
void vm_init_globals() { check_ThreadShadow(); basic_types_init(); eventlog_init(); mutex_init(); chunkpool_init(); perfMemory_init();}jint init_globals() { HandleMark hm;...
2010-04-07 16:01:17
196
jvm interpreter
jvm interpreter解释器的初始化JNI_CreateJavaVM||--> Threads::create_vm | |--> init_globals | |-->interpreter_init | |-->AbstractInterpreter::initialize ...
2010-04-06 23:51:12
193
java class文件格式
struct ClassFile{u4 magic; //识别Class文件格式,具体值为0xCAFEBABE,u2 minor_version; // Class文件格式副版本号,u2 major_version; // Class文件格式主版本号,u2 constant_pool_count; // 常数表项个数...
2010-04-06 23:43:25
200
汇编语言与计算机体系结构--使用C++和Java
第1章数制11.1简介11.2按位记数制11.3各数制的算术规则41.4数制转换61.5Horner法91.6有符号二进制数101.6.1符号—绝对值表示法101.6.22的补码表示法111.6.31的补码表示法131.6.4加n表示法141.7用2的补码加法计算减法141.82的补码和无符号数的范围151.9扩展2的补码和无符号数161.1...
2010-04-06 15:16:20
730
JVM内存管理及垃圾回收机制
JAVA在内存中由 Perm 和 Heap 组成. 其中Heap = {Old + NEW = { Eden , from, to } }JVM内存模型中分两大块,一块是 NEW Generation, 另一块是Old Generation. 在New Generation中,有一个叫Eden的空间,主要是用来存放新生的对象,还有两个Survivor Spaces(from,to)...
2010-04-06 09:30:20
79
IBM Java Jvm GC实现内幕 (几年前的老文)
好言归正传,按照Sam Borman的说法IBM java 1.3.0的GC是HotSpot的2倍,如果在多对称架构中性能更加的高。IBMJava如何做到高性能的GC的呢?我把他们的这篇2万多字的文章浓缩一下介绍给大家。 IBM JVM的GC分为三个步骤,Mark phase(标记),Sweep phase(清扫),Compaction phase(内存紧缩). 在了解这些过程之前,我们先...
2010-04-05 14:39:55
208
Tomcat6.0配置SSL
Tomcat6.0配置SSL 一、为了节约时间,我这里就只根据我的配置过程进行描述,读者根据各自情况自己分析。 1、在命令行中进入%CATALINA_HOME%/bin目录下执行以下命令: (1)%CATALINA_HOME%/bin> keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass chan...
2010-04-02 17:19:18
135
mysql 核心内幕
目录 第1章 MySQL的前世今生 1.1 MySQL的历史 1.2 存储引擎 1.3 MySQL市场 1.4 后话第2章 数据库系统的立体视图 2.1 数据库系统架构 2.2 数据库系统的分类 2.2.1 面向对象型数据库 2.2.2 关系型数据库 2.2.3 对象关系型数据库 2.3 关系型数据库系统架构 2.3.1 客户端应用...
2010-03-30 17:34:04
124
并发控制原理
事务之间的相互影响可能导致数据库状态的不一致,即使各个事务能保持状态的正确性,而且也没有任何故障发生。因此,不同事务中各个步骤的执行顺序必须以某种方式进行规范。控制这些步骤的功能由DBMS的调度器部件完成,而保证并发执行的事务能保持一致性的整个过程称为并发控制。调度器的作用如图1所示。[img]http://dl.iteye.com/upload/attachment/226829/7...
2010-03-30 17:31:28
160
从VFS inode到LFS inode的寻址过程
我们知道Linux是借用虚拟文件系统作为上层抽象的管理者来统一支持下层的各具差异的逻辑文件系统。应用程序要访问任何已经注册并挂载的逻辑文件系统相应物理存储外设都是通过VFS层次提供的统一调用接口来实现。Linux中对物理外存上的数据块采用的组织管理方式是借助称为索引节点(inode)的数据结构,因此当应用进程要与具体的逻辑文件系统进行数据存取时,相应的逻辑文件系统将需要提供操作例程接口来实施具体的...
2010-03-30 17:16:30
185
聚集索引与非聚集索引的基本概念
聚集索引,是一种指明表数据物理存储顺序的索引.在聚集索引中,行的物理存储顺序与索引顺序完全相同,即索引的顺序决定了表中行的存储顺序.表数据按照指定作为聚集索引的一个或多个键列排序并存储.聚集索引类似于一本字典,字典按照字母顺序存储信息,并提供引导字帮助用户快速定位信息的位置,在同一页上找到数据和它的引导字.相似的,聚集索引含有索引页和实际数据页,数据页组成聚集索引的最底层(叶子节点).根节点中的每...
2010-03-30 17:14:13
149
bitmap索引的深入研究
位图(bitmap)索引是另外一种索引类型,它的组织形式与B树索引相同,也是一棵平衡树。与B树索引的区别在于叶子节点里存放索引条目的方式不同。从前面我们知道,B树索引的叶子节点里,对于表里的每个数据行,如果被索引列的值不为空的,则会为该记录行在叶子节点里维护一个对应的索引条目。而位图索引则不是这样,其叶子节点里存放的索引条目如下图所示。 假设某个表T里所有的记录在列C1上...
2010-03-30 17:03:26
470
Mysql源代码分析系列
Mysql源代码分析系列(2): 源代码结构 Mysql源代码主要包括客户端程序代码,服务器端代码,测试工具和一些库构成,下面我们对比较重要的目录做些介绍。 BUILD这个目录在本系列的上篇文章中我们仔细看过,内含各种平台的编译脚本,这里就不仔细说了。 client这个目录下有如下比较让人眼熟的文件: mysql.cc, mysqlcheck.c, ...
2010-03-30 16:51:57
730
并发控制原理
事务之间的相互影响可能导致数据库状态的不一致,即使各个事务能保持状态的正确性,而且也没有任何故障发生。因此,不同事务中各个步骤的执行顺序必须以某种方式进行规范。控制这些步骤的功能由DBMS的调度器部件完成,而保证并发执行的事务能保持一致性的整个过程称为并发控制。调度器的作用如图1所示。 首先讨论如何保证并发执行的事务能保持数据库状态的正确性。抽象的要求称为可串行性,另外还有一个更...
2010-03-30 16:46:58
228
数据库性能调优技术
一、概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求。数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。 调优需要有广泛的知识,这使得它既简单又复杂。 说调优简单,是因为调优者不必纠缠于复杂的公式和规则。许多学术界和业界的研究者都在尝试...
2010-03-30 16:45:16
169
日志系统原理
一:事务系统1.事务的工作模型 事务必须满足原子性,所封装的操作或者全做或者全不做。事务管理系统需要做两件事,1)让日志系统产生日志,2)保证多个事务并发执行,满足ACID特性。 事务系统工作模型,见图1。 [img]http://dl.iteye.com/upload/attachment/226790/715419c6-f5fb-386e-8c8f-481e...
2010-03-30 16:40:52
235
mysql内核分析--innodb哈希表的内部实现(上)
1.哈希表的概述 hash表的实现是innodb的基础功能之一,通过关键值进行映射,从而迅速进行查询、插入、删除的操作。 hash表算法,在数据库内核里面被广泛的使用,举个例子,这个结构将会在下文中继续使用的。/* Data structure for a column in a table */struct dict_col_struct{...
2010-03-30 16:36:56
121
Mysql查询优化器浅析
1 定义 Mysql查询优化器的工作是为查询语句选择合适的执行路径。查询优化器的代码一般是经常变动的,这和存储引擎不太一样。因此,需要理解最新版本的查询优化器是如何组织的,请参考相应的源代码。整体而言,优化器有很多相同性,对mysql一个版本的优化器做到整体掌握,理解起mysql新版本以及其他数据库的优化器都是类似的。 优化器会对查询语句进行转化,转化等价的查询语句。举个例...
2010-03-30 16:33:18
89
InnoDB页结构浅析
InnoDB将所有的记录存放在数据库页中(也可以称为数据块)。一般情况下,所有的页大小都是16KB。 数据页中不仅仅包含实际的记录,还包含其它的一些内容,比如文件头以及文件尾等等。 InnoDB的页包含以下几个部分:1) Fil Header:文件头2) Page Header:页头3) Infimum+Supremum Records:...
2010-03-30 16:32:08
126
InnoDB记录结构浅析
InnoDB记录由三个部分组成,见表1:表1:InnoDB的记录组织形式名称 长度 Field Start Offsets F*1或者 (F*2)个字节 Extra Bytes 6个字节 Field Contents 和记录的实际内容相关 备注:1) “F”是指记录的字段数量。2) “Field Start Offsets”是一个目录...
2010-03-30 16:31:27
113
mysql5.1在windows下的编译方法
编译步骤1、从mysql.com上下载最新源码mysql-5.1.35.zip,近40M,需要点耐心 -- 中间网站提示我不是可信任的用户,让我填表确认,填了几次都不行,最后将fixfox关了,干了会活再回来有能下载了,呵呵,是不是ORACLE故意制造麻烦,也未可知;2、解压,阅读INSTALL-SOURCE和INSTALL-WIN-SOURCE这两个安装文件,发现文件写的一塌...
2010-03-30 16:28:13
141
CPU学习
这是作者学习硬件基本知识过程中的笔记,由于以前很少接触这方面的知识,又缺乏系统的学习,难免会出现错误,希望得到大家指正。一、Intel CPU的主要部件:1. CPU内核:是真正意义上的处理器,用于执行指令和处理数据,其计算能力与CPU的速度密切相关。2. L1 CacheCPU内部集成的L1 Cache(一级高速缓存),又被称为主缓存,用于暂存部分指令和数...
2010-03-30 14:16:01
296
fuse-2.7.3.tar.gz开源代码学习心得
fuse-2.7.3.tar.gz开源代码学习心得:------------------------------------------------------------------------------------------------------------一,相关的理论知识准备 1,Linux Vfs的基本概念及相关知识,比较重要的如Linux文件系统的Vfs结构、Supp...
2010-03-30 14:06:58
593
Cache Cohernce with Multi-Processor
刚写完一篇关于Cache Coherence的文章,就发现BNN2年前就有一篇好文,早知道就不这么费事自己写了:)Recently work with dual cpu kernel part. For dual cpu, or we say, multi-processor, the big challenge part for a kernel is how to handle the...
2010-03-30 13:57:52
114
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人