JVM 字节码与类的加载篇-1-Class文件结构
概述字节码文件的跨平台性
Java语言:跨平台的语言
当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译
Java虚拟机:跨语言的平台
Java虚拟机不和包括Java在内的任何语言绑定,它只与Class 文件特定的二进制文件格式所关联。无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行。
要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码
前端编译器的主要任务就是负责将符合Java语法规范的Java代码转换为符合JVN规范的字节码文件
javac是一种能够将Java源码编译为字节码的前端编译器
javac编译器在将Java源码编译为一个有效的字节码文件过程中经历了4个步骤
词法解析
语法解析
语义解析
生成字节码
Java的前端编译器
Java源代码的编译结果是字节码,那么肯定需要有一种编译器能够将Java源码编译为字节码,承担这个重要责任的就是配置在path环境变量中的javac编译器。javac是一种能够将Java源码编译为字节码 ...
MySQL高级篇-13-数据库事务
数据库事务概述事务是数据库区别于文件系统的重要特性之一,有了事务就会让数据库始终保持一致性,同时还能通过事务的机制恢复到某个时间点,可以保证已提交到数据库的修改不会因为系统崩溃而丢失。
存储引擎支持情况SHOW ENGINES命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。
事务基本概念
事务
数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成
事务处理的原则
保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方 式。当在一个事务中执行多个操作时,要么所有的事务都被提交commit,那么这些修改就永久地保 存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚rollback到最初状态。
事务的ACID特性
ACID特性
说明
原子性
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到 ...
MySQL高级篇-12-数据库的其他调优策略
数据库调优的措施调优的目标
尽可能 节省系统资源 ,以便系统可以提供更大负荷的服务(吞吐量更大)
合理的结构设计和参数调整,以提高用户操作 响应的速度 (响应速度更快)
减少系统的瓶颈,提高MySQL数据库整体的性能
如何定位调优问题
用户的反馈(主要)
用户是我们的服务对象,因此他们的反馈是最直接的。虽然他们不会直接提出技术建议,但是有些问题往往是用户第一时间发现的。我们要重视用户的反馈,找到和数据相关的问题。
日志分析(主要)
可以通过查看数据库日志和操作系统日志等方式找出异常情况,通过它们来定位遇到的问题。
服务器资源使用监控
通过监控服务器的CPU、内存、IO等使用情况,可以实时了解服务器的性能使用,与历史情况进行对比。
数据库内部状况监控
在数据库的监控中,活动会话(Active Session)监控是一个重要的指标。通过它,你可以清楚地了解数:据库当前是否处于非常繁忙的状态,是否存在SQL堆积等。
其它
除了活动会话监控以外,也可以对事务 、 锁等待 等进行监控,这些都可以帮助我们对数据库的运 行状态有更全面的认识。
调优的维度和步骤需 ...
MySQL高级篇-11-数据库的设计规范
数据库设计
糟糕的数据库设计
数据冗余、信息重复,存储空间浪费
数据更新、插入、删除的异常
无法正确表示信息
丢失有效信息
程序性能差
良好的数据库设计
节省数据的存储空间
保证数据的完整性
方便进行数据库应用系统的开发
范式范式简介在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。它是一张数据表的设计结构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
常用范式 目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:
第一范式(1NF)
第二范式 (2NF
第三范式(3NF)
巴斯-科德范式(BCNF)
第四范式(4NF)
第五范式(5NF,又称完美范式)
一般来说,在关系型数据库设计中,最高也就遵循到BCNF,普遍还是3NF。但也不绝对,有时候为了提高某些查询性能,还需要破坏范式规则,也就是反规范化。
键和相关属性的概念范式的定义会使用到主键和候选键,数据库中的键(Key)由一个或者多个属性组成。
数据表中常用的几种键和属性的定义:
超键:能唯一标识元组的属性集叫做超键
候选键:如果超键不包括多余 ...
JUC-7-CAS
CAS 介绍
WHAT CAS
CAS即compare and swap,包含三个操作数:
内存位置
预期原值
更新值
执行CAS操作时,将内存位置与预期原值进行比较,如果匹配,那么处理器会自动将该位置值更新为新值;如果不匹配,那么处理器不做任何操作,多个线程同时执行CAS操作只有一个会成功。
WHY CAS
CAS有3个操作数,位置内存值V、旧的预期值A和要修改的更新值B。
当且仅当旧的预期值A和内存值V相同时,将内存值V修改为B,否则无操作或者重试,这种重试行为称为自旋。
硬件级别
CAS是JDK提供的非阻塞原子性操作,它通过硬件保证了比较-更新的原子性。
CAS是一条CPU的原子指令cmpxchg指令,不会造成数据不一致问题,Unsafe提供的CAS方法(如compareAndSwapXXX)底层实现即为CPU指令cmpxchg。执行cmpxchg指令时会判断当前系统是否为多核系统,如果是就给总线加锁,只有一个线程会对总线加锁成功,加锁成功之后会执行CAS操作,CAS的原子性实际上是CPU实现独占的
compareAndSet(int expect, int u ...
JVM 内存与垃圾回收篇-10-垃圾回收器
GC 分类与性能指标GC 分类
按线程数分,可以分为串行垃圾回收器和并行垃圾回收器
串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。
在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的client模式下的JVM中
在并发能力比较强的CPU上,并行回收器产生的停顿时间要短于串行回收器
和串行回收相反,并行收集可以运用多个CPU同时执行垃圾回收,因此提升了应用的吞吐量,不过并行回收仍然与串行回收一样,采用独占式,使用STW机制
按工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器
并发式垃圾回收器与应用程序线程交替工作,以尽可能减少应用程序的停顿时间
独占式垃圾回收器 STW 一旦运行,就停止应用程序中的所有用户线程直到垃圾回收过程完全结束
按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器
压缩式垃圾回收器会在回收完成后,对存活对象进行压缩整理,消除回收后的碎片。再分配对象空间 ...










