个人简介

Echo Blog


江湖无名 安心练剑
  • JMM-04-sequentially consistent
    数据竞争 竞争 当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。 如果一个多线程程序能正确同步,这个程序将是一个没有数...
    2018-07-27 01:24:45 | JMM
  • JMM-03-cache & reordering
    缓存 为了提升性能,JVM 做了 2 件事情。 缓存+重排序 为什么会出现线程可见性问题 要想解释为什么会出现线程可见性问题,需要从计算机处理器结构谈起。 我们都知道计算机运算任务需要CPU和内存相互配合共同完成,其中CPU负责逻辑计算,内存负责数据存储。 CPU要与内存进行交互,如读取运算数据、存储运算结果等。 由于内存和CPU的计算速度有几个数量级的差距,为了提高CPU的利...
    2018-07-26 15:14:31 | JMM
  • JMM-02-data struct
    内存模型 Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。 运行时内存模型 运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包...
    2018-07-26 13:36:45 | JMM
  • JMM-01-intro
    Java Memory Model 简介 在多处理器系统中,处理器通常有一个或多个内存缓存层,通过加速对数据的访问(因为数据离处理器更近)和减少共享内存总线上的流量(因为许多内存操作可以由本地缓存来满足),提高性能。内存缓存可以极大地提高性能,但是它们带来了许多新的挑战。 例如,当两个处理器同时检查相同的内存位置时,会发生什么?在什么条件下它们会看到相同的值? 在处理器级别,内存模型...
    2018-07-26 12:55:37 | JMM
  • Java Model Memory
    JMM (Java 内存模型) 作用 内存模型描述给定程序和该程序的执行跟踪,该执行跟踪是否为程序的合法执行。 Java编程语言内存模型通过检查执行跟踪中的每个读取并检查读取所观察到的写入是否根据某些规则有效来工作。 内存模型描述程序的可能行为。一个实现可以自由地生成它喜欢的任何代码,只要所有的结果执行都会产生一个可以由内存模型预测的结果。 这为实现人员执行大量代码转换提供了很大的...
    2018-07-26 12:55:37 | Java
  • Database Transaction
    数据库事务 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 当多个应用程序在并发访问数据库时,...
    2018-07-26 03:17:13 | Database
  • 浅谈数据库事务之 undo-log
    前言 大家好,我是老马。 上一篇文章我们简单学习了事务的隔离级别, 另外的一些概念,比如原子性和持久性谈的人不多。 本文就简单聊一下 mysql 中的 undo-log。 undo log的概念 undo log是mysql中比较重要的事务日志之一,顾名思义,undo log是一种用于撤销回退的日志,在事务没提交之前,MySQL会先记录更新前的数据到 undo log日志文件里面...
    2018-07-26 03:17:13 | Database
  • 浅谈数据库事务之 redo-log
    前言 大家好,我是老马。 上一篇文章我们简单学习了事务的隔离级别, 另外的一些概念,比如原子性和持久性谈的人不多。 本文就简单聊一下 mysql 中的 redo-log。 REDO-LOG 是什么? redo log叫做重做日志,是保证事务持久性的重要机制。 当mysql服务器意外崩溃或者宕机后,保证已经提交的事务,确定持久化到磁盘中的一种措施。 为什么需要? innod...
    2018-07-26 03:17:13 | Database