CMS垃圾回收器与三色标记算法

垃圾收集算法 整体可以分为以下几种算法: 标记复制算法 标记整理算法 标记清除算法 分代收集理论 目前的虚拟机的垃圾回收器都是采用分代收集算法,一般根据对象存活周期的不同,将内存分为几块,一般将java堆分为新生

jvm对象的内存分配与回收

对象分配过程简略流程图 对象栈上分配 我们都知道对象分配在堆上,当对象没有被引用时就会当成垃圾回收,如果对象数量比较多,会给GC带来较大的压力,影响性能,为了减少临时对象在堆内的分配次数,JVM 通过逃逸分

jvm中对象的创建过程

1. 类加载检查 虚拟机遇到一条 new 指令时,首先检查这个指令的参数能否在常量池中找到一个类符号引用,并且检查这个符号引用代表的类是否已经被加载,解析,初始化过。如果没有必须先执行类的加载初始化过程。 2. 分配内存

jvm内存模型

线程共享 每个线程开启的时候都会划分几块内存空间,线程栈,程序计数器,本地方法栈。这几个内存空间是依附于线程的,线程结束后,这些空间也会释放 所有线程共享 除此之外还有堆,方法区,类加载子系统,字节码执行引

java中的类加载器和双亲委派机制

类加载是什么 把磁盘中的java文件加载到内存中的过程叫做类加载 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM. 有如下 User 类 package dc.dccmmtop; public Class User { public static void main(String[] args) { System.out.println("hello"); } } 运

finalize的意义

程序员都了解初始化的重要性,但是会常常忘记同样重要的清理工作,java有垃圾回收器负责回收无用对象占用的内存资源,但是也有特殊情况,你的对象获得了一块特殊的内存区域,并不是通过 new 方法,由于垃圾回收器只

MySQL中的BufferPool与RedoLog的作用

介绍 BufferPool 之前,先抛出一个问题,每次更新,新增,删除的动作,都会去写磁盘吗?如果是,那样效率会不会很低,如果不是,怎么保证数据不会丢失? 不会实时写入磁盘 如果每次对数据的操作都要实时同步到硬盘中,那么将要产

MVCC实现原理

MVCC多版本并发控制机制 在上面博客中介绍了可重复的事务隔离级别下,无法读到其他事务已提交的数据,这个功能就是MVCC(Multi-Version Concurrency Control)来实现的, 对一行数据的读和写两个操作

MySQL数据类型的使用

在MySQL中,选择正确的数据类型,对于性能至关重要。一般应该遵循下面两步: (1)确定合适的大类型:数字、字符串、时间、二进制; (2)确定具体的类型:有无符号、取值范围、变长定长等。 在MySQL数据类

MySQL事务和锁详解

数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了解决多事务

索引优化

CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位', `hire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间', PRIMARY KEY (`id`), KEY `idx_name_age_position` (`name`,`age`,`position`) USING BTREE )

MySQL内部结构

大体来说,MySQL可以分为 server 层和存储引擎层两部分,如下图 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数 (如日期、时间、数学和加密函数

Explain详解

在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL 注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中 explain 两个变种 explain extended