<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[登峰小蚁]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wrongyao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wrongyao]]></copyright><item><title><![CDATA[mysql怎么实现事务]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115654041</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115654041</guid><author>wrongyao</author><pubDate>Tue, 13 Apr 2021 09:23:47 +0800</pubDate><description><![CDATA[文章目录1. 开篇2. redo log 与 undo log介绍1. redo log2. undo log3. mysql锁技术以及MVCC基础1. mysql锁技术2. MVCC基础4. 事务的实现1. 原子性的实现1.1 undo log 的生成1.2 根据undo log 进行回滚2. 持久性的实现2.1 redo-log生成3. 隔离性实现4. 一致性的实现5. 总结
参考文档
1. 开篇
相信大家都用过事务以及了解他的特点，如原子性(Atomicity),一致性(Consistency),隔离]]></description><category></category></item><item><title><![CDATA[0120-分析GC日志]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115498854</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115498854</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 23:12:59 +0800</pubDate><description><![CDATA[文章目录1. GC日志参数2. GC日志格式1. GC分类2. GC日志分类3. GC日志剖析4. MinorGC日志分析5. MajorGC日志分析3. GC日志分析工具
1. GC日志参数

-verbose:gc 输出gc日志信息，默认输出到标准输出
-XX:+PrintGC 等同于-verbose:gc 表示打开简化的GC日志
-XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志，并在进程退出时输出当前内存各区域分配情况
-XX:+PrintGCTimeStamps 输出G]]></description><category></category></item><item><title><![CDATA[0110-JVM运行时参数]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115497956</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115497956</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 22:26:36 +0800</pubDate><description><![CDATA[文章目录1. JVM参数选项类型1. 类型一：标准参数选项2. 类型二：-X参数选项3. 类型三：-XX参数选项2. 添加JVM参数选项1. 运行jar包2. 通过Tomcat运行war包3. 常用的JVM参数选项1. 打印设置的XX选项及值2. 堆、栈、方法区等内存大小设置3. OutofMemory相关的选项4. 垃圾收集器相关的选项5. GC日志相关选项
1. JVM参数选项类型
1. 类型一：标准参数选项
特点

比较稳定，后续版本基本不会变化
以-开头

选项
运行java或者java -help]]></description><category></category></item><item><title><![CDATA[0100-JVM监控及诊断工具-命令行篇]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115496357</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115496357</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 21:27:41 +0800</pubDate><description><![CDATA[文章目录1. 监控的意义2. jps查看正在运行的java进程1. 基本情况2. 基本用法3. jstat查看jvm统计信息1. 基本情况2. 基本语法2.1 options2.2 interval2.3 count2.4 -t2.5 -h3. 补充4. jinfo实时查看和修改JVM配置参数1. 基本情况2. 基本语法3. 拓展5. jmap导出内存映像文件&amp;内存使用情况1. 基本情况2. 基本语法3. 使用3.1 使用1-导出内存映像文件3.2 使用2-显示堆内存的相关信息3.3 其它做用4. ]]></description><category></category></item><item><title><![CDATA[0090-再谈类的加载器]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115496107</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115496107</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 21:10:48 +0800</pubDate><description><![CDATA[文章目录1. 概述2. 复习：类的加载器分类1. 引导类加载器2. 扩展类加载器3. 系统类加载器4. 用户自定义类加载器3. 测试不同的类加载器4. ClassLoader  源码解析ClassLoader  的主要方法2. SecureClassLoader 与 URLClassLoader3. ExtClassLoader 与 AppClassLoader4.  Class.forName() 与 ClassLoader.loadClass()5. 双亲委派模型1. 定义与本质2. 优势与劣势3. 破]]></description><category></category></item><item><title><![CDATA[0080-类的加载过程详解]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115496066</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115496066</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 21:08:55 +0800</pubDate><description><![CDATA[文章目录1. 概述2. 过程一：Loading( 加载)1.  加载完成的操作2. 二进制流的获取方式3. 类模型与 Class  实例的位置4. 数组类的加载3. 过程二：Linking( 链接) 阶段环节 1:链接阶段之 Verification ( 验证)环节 2:链接阶段之 Preparation ( 准备)环节 3:链接阶段之 Resolution ( 解析)4. 过程三：Initialization( 初始化) 阶段5. 过程四：类的 Using( 使用)6. 过程五：类的 Unloading(]]></description><category></category></item><item><title><![CDATA[0070-字节码指令集与解析举例]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115496038</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115496038</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 21:07:46 +0800</pubDate><description><![CDATA[文章目录1. 概述1. 执行模型2. 字节码与数据类型3. 指令分类2. 加载与存储指令1. 复习：再谈操作数栈与局部变量表2.  局部变量压栈指令3. 常量入栈指令4. 出栈装入局部变量表指令3. 算术指令1.  所有算数指令2.  比较指令的说明4. 类型转换指令1.  宽化类型转换2.  窄化类型转换5. 对象的创建与访问指令1.  创建指令2.  字段访问指令3.  数组操作指令4. 类型检查指令6. 方法调用与返回指令1. 方法调用指令2. 方法返回指令7. 操作数栈管理指令8. 控制转移指令1.]]></description><category></category></item><item><title><![CDATA[0060-Class文件结构]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115495910</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115495910</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 21:05:49 +0800</pubDate><description><![CDATA[文章目录1. 虚拟机的基石：Class 文件2. Class  文件结构2.1 魔数：Class2.2 Class 文件版本号2.3 常量池：存放所有常量2.4 访问标识2.5 类索引、父类索引、接口索引集合2.6 字段表集合2.7 方法表集合2.8 属性表结合3. 总结
1. 虚拟机的基石：Class 文件

字节码文件里是什么？

源代码经过编译器编译之后便会生成一个字节码文件，字节码是一种二进制的类文件，它的内容是 JVM 的指令，而不像 C、C++ 经由编译器直接生成机器码

jvm指令由执行引擎再]]></description><category></category></item><item><title><![CDATA[0051-为什么标记的时候需要STW]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/115495865</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/115495865</guid><author>wrongyao</author><pubDate>Wed, 07 Apr 2021 21:01:01 +0800</pubDate><description><![CDATA[文章目录1. Serial 和 ParNew 在进行垃圾回收时，为什么需要stop the world？不stop thw world 可以吗？2. CMS 进行垃圾回收的时，为什么有些阶段工作线程可以不停止？2.1 并发标记阶段2.2 并发清理阶段2.3 CMS 不停止工作线程，会有哪些问题？
1. Serial 和 ParNew 在进行垃圾回收时，为什么需要stop the world？不stop thw world 可以吗？
在进行标记的时候，如果工作线程不停止的话，那么肯定会有新对象生成。这些对象是]]></description><category></category></item><item><title><![CDATA[检测主从复制数据是否一致及恢复]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/109724656</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/109724656</guid><author>wrongyao</author><pubDate>Mon, 16 Nov 2020 16:55:51 +0800</pubDate><description><![CDATA[文章目录1. 使用工具 percona-toolkit2. 创建账号3. 创建校验表4. 执行命令5. 数据恢复6. 常用命令
1. 使用工具 percona-toolkit

bin/pt-table-checksum用来检测主从数据的一致性
bin/pt-table-sync用来恢复主从数据
离线安装教程

2. 创建账号
主库执行
-- centos0010是主库的host（ip也行）
GRANT UPDATE,INSERT,DELETE,SELECT, PROCESS, SUPER, REPLICA]]></description><category></category></item><item><title><![CDATA[离线安装percona-toolkit]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/109724544</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/109724544</guid><author>wrongyao</author><pubDate>Mon, 16 Nov 2020 16:45:41 +0800</pubDate><description><![CDATA[文章目录1. 安装DBI2. 安装DBD3. 安装percona toolkit
安装包
1. 安装DBI
tar -xzf DBI-1.636.tar.gz
perl Makefile.PL
make
make test
make install

2. 安装DBD
tar -xzf DBD-mysql-4.038.tar.gz
perl Makefile.PL --mysql_config={path}
make
make test
make install


查找mysqld的位置信息

find ]]></description><category></category></item><item><title><![CDATA[0050-垃圾回收器]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/107021304</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/107021304</guid><author>wrongyao</author><pubDate>Mon, 29 Jun 2020 15:31:04 +0800</pubDate><description><![CDATA[文章目录1. 基础定义1.1 按线程数分1.2 按工作模式分1.3 性能指标2. 垃圾回收器概述3. Serial-串行回收器3.1 Serial3.2 Serial Old4. ParNew-并行回收器5. Parallel-吞吐量优先回收器5.1 Parallel Scavenge5.2 Parallel Old6. CMS-低延迟回收器7. G1-区域化分代式回收器8. GC总结9. GC日志分析
1. 基础定义
1.1 按线程数分
按线程数分，垃圾回收器可以分为串行或者并行（指的是垃圾回收的线程）
]]></description><category></category></item><item><title><![CDATA[0040-垃圾收集算法]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/107021264</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/107021264</guid><author>wrongyao</author><pubDate>Mon, 29 Jun 2020 15:28:35 +0800</pubDate><description><![CDATA[文章目录1. 前言2. 标记算法2.1 引用计数算法2.2 可达性分析算法3. 对象的finalization机制4. 垃圾清除阶段算法4.1 标记-清除（Mark-Sweep）4.2 复制算法（Copying）4.3 标记-压缩算法（Mark-Compact）4.4 三种算法的比较5. 分代收集算法6. 补充算法6.1 增量收集算法6.2 分区算法
1. 前言
垃圾回收分为两个阶段，首先确认哪些对象是垃圾——标记阶段，其次是垃圾确认以后的回收——回收阶段
2. 标记算法
2.1 引用计数算法
1. 简述
]]></description><category></category></item><item><title><![CDATA[0036-StringTable]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526858</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526858</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:15:14 +0800</pubDate><description><![CDATA[文章目录1. String的基本特性2. String的内存分配3. String的基本操作4. 字符串拼接操作5. intern()的使用
1. String的基本特性
String的基本特性
1. String字符串的定义方式
    String s1 = "atguigu";// 字面量定义方式
    String s2 = new String("hello");
    
2. String声明为final的，不可被继承

3. String实现了Serializable接口：表示字符串是支持]]></description><category></category></item><item><title><![CDATA[0035-对象实例化步骤，内存布局，访问定位]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526778</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526778</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:14:35 +0800</pubDate><description><![CDATA[文章目录1. 实例化步骤2. 内存布局3. 对象访问定位
1. 实例化步骤

对象创建的方式

1. new

2. Class的newInstance()

3. Contructor的newInstance(xxx)

4. 使用clone

5. 使用反序列化

6. 第三方库Objenesis


对象的创建步骤

1. 判断对象对应的类是否加载，链接，初始化，没有加载，使用双亲委派机制加载类

2. 为对象分配内存
    不同的垃圾收集器会导致，内存规整或不规整，不同的内存结构，会有不同的分配方]]></description><category></category></item><item><title><![CDATA[0034-方法区]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526758</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526758</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:14:03 +0800</pubDate><description><![CDATA[文章目录1. 栈、堆、方法区的交互关系2. 方法区的理解3. 方法区的演进4. 设置方法区大小5. 方法区的内部结构5.1 类型信息5.2 域（Field）信息5.3 方法（Method）信息5.4 类变量5.5 运行时常量池 &amp; 常量池6. 方法区的演进细节7. 方法区的垃圾回收
1. 栈、堆、方法区的交互关系

线程共享的角度


1. 线程共享区域：堆和方法区，两者都会有OutOfMemoryError和GC

2. 线程独占区域：虚拟机栈，本地方法栈，程序计数器，两个栈会出现StackOve]]></description><category></category></item><item><title><![CDATA[0033-堆]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526725</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526725</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:13:10 +0800</pubDate><description><![CDATA[文章目录1. 简述2. 堆空间的设置3. 年轻代与老年代4. 对象的分配过程5. Minor GC/ Major GC/ Full GC6. 堆空间分代思想7. 对象提升规则8. TLAB(Thread Local Allocation Buffer)9. 常用参数总结10. 堆是分配对象的唯一选择吗
1. 简述
1. 堆是jvm管理的一块最大内存空间，且一个jvm只存在一个堆内存

2. 堆空间被所有的线程共享，同时也可以划分线程私有的缓冲区（Thread Local Allocation Buffer,]]></description><category></category></item><item><title><![CDATA[0032-虚拟机栈]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526707</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526707</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:12:30 +0800</pubDate><description><![CDATA[文章目录1 简介2 栈配置3 栈帧3.1 局部变量表（local variables）3.2 操作数栈（Operand Stack）3.3 动态链接（Dynamic Linking）3.4 方法返回地址（Return Address）3.5 一些附加信息4. 栈的相关面试题
1 简介
java虚拟机栈，早期也称为java栈，每个线程在创建时，都会创建一个虚拟机栈，其内部包含一个个栈帧（Stack Frame），对应一次次的方法调用，虚拟机栈是线程私有的，没有GC，有可能会出现StackOverFlowErr]]></description><category></category></item><item><title><![CDATA[0031-程序计数器]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526393</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526393</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:02:33 +0800</pubDate><description><![CDATA[文章目录1 简介2 作用3 举例4 常见问题
1 简介
1. 存储空间很小的内存空间，运行速度最快的存储区域

2. 程序计数器是线程私有的，生命周期与线程的生命周期一致

3. 任何一个线程同一个时间节点都只有一个方法执行，这个方法称为当前方法，
程序计数器会存储当前正在执行java方法的jvm指令地址，如果是native方法，则是未指定值（undefined）

4. 它是唯一一个在java虚拟机中没有规定任何OutOfMemoryError的情况

2 作用
程序计数器会存储当前正在执行java方法的]]></description><category></category></item><item><title><![CDATA[0030-内存概述]]></title><link>https://blog.youkuaiyun.com/wrongyao/article/details/106526371</link><guid>https://blog.youkuaiyun.com/wrongyao/article/details/106526371</guid><author>wrongyao</author><pubDate>Wed, 03 Jun 2020 16:01:47 +0800</pubDate><description><![CDATA[文章目录概览图1. 内存角色1.1 方法区1.2 堆区1.3 虚拟机栈1.4 程序计数器1.5 本地方法栈2. 线程共享性
概览图

1. 内存角色
内存中主要涉及到的角色有
方法区，堆，虚拟机栈，程序计数器，本地方法栈
1.1 方法区
方法区主要存储加载的class类元数据，包括类型信息，运行时常量池（不包含字符串常量），域信息，方法信息等
1.2 堆区
堆区又分为新生代和老年代，新生代又分为Eden，s0，s1区，是垃圾回收的重点区域，主要存储new出来的对象，还有几个特殊的对象，Class对象及内部的]]></description><category></category></item></channel></rss>