<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jason_Dom的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jason_Dom</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jason_Dom]]></copyright><item><title><![CDATA[JVM学习笔记六：字节码指令]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/111167129</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/111167129</guid><author>Jason_Dom</author><pubDate>Tue, 15 Dec 2020 15:48:34 +0800</pubDate><description><![CDATA[一、前言

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字（称为操作码，Opcode）以及跟随其后的零至多个代表此操作所需的参数（称为操作数，Operand）构成。由于Java虚拟机采用面向操作数栈而不是面向寄存器的架构，所以大多数指令都不包含操作数，只有一个操作码，指令参数都存放在操作数栈中。

Java虚拟机操作码的长度为一个字节(0~255)，又class文件格式放弃了编译后代码的操作数长度对齐，所以虚拟机在处理超过256条的字节数的数据时，不得不在运行时从字节中重建出具体数据的结]]></description><category></category></item><item><title><![CDATA[JVM学习笔记五：Class类文件结构]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/109744779</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/109744779</guid><author>Jason_Dom</author><pubDate>Mon, 14 Dec 2020 10:46:16 +0800</pubDate><description><![CDATA[一、前言

在Java技术发展之初，Java虚拟机就被设定为不仅限于java语言运行，也可以支持其他语言(如：Kotlin、Clojure、Groovy、JRuby、JPython、Scala等)在其上运行。JVM发展至今，尤其是在2018年，基于HotSpot扩展而来的GraalVM公开之后，当年的虚拟机设计者们已经基本兑现了这个承诺。







实现语言无关性的基础在于虚拟机和字节码存储格式。Java虚拟机不与包括Java语言在内的任何程序语言绑定，它只与“Class文件”这种特定的二进制文件格..]]></description><category></category></item><item><title><![CDATA[JVM学习笔记四：垃圾回收算法]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/109490604</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/109490604</guid><author>Jason_Dom</author><pubDate>Sat, 14 Nov 2020 20:08:06 +0800</pubDate><description><![CDATA[一、前言

从如何判定对象消亡的角度出发，垃圾收集算法可以划分为“引用计数式垃圾收集”（Reference Counting GC）和“追踪式垃圾收集”（Tracing GC）两大类，这两类也常被称作“直接垃圾收集”和“间接 垃圾收集”。在主流Java虚拟机中未涉及引用计数式垃圾收集算法，所以只讨论追踪式垃圾收集。





二、分代收集理论

分代收集名为理论，实质是一套符合大多数程序运行实际情况的经验法则，它建立在两个分代假说之上：

弱分代假说：绝大多数都是朝生夕灭的。
	强分代假说：熬过越多次垃..]]></description><category></category></item><item><title><![CDATA[JVM学习笔记三：对象死亡算法与过程概述]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/109223606</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/109223606</guid><author>Jason_Dom</author><pubDate>Wed, 04 Nov 2020 14:49:18 +0800</pubDate><description><![CDATA[一、前言

在Java内存运行时区域中，程序计数器、虚拟机栈和本地方法栈这三个区域随线程而生，随线程而灭，栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基 本上是在类结构确定下来时就已知的。因此这几个区域的内存分配和回收都具备确定性，当方法结束或者线程结束时，内存就自然跟随着回收了。

而Java堆和方法区这两个区域，只有处于运行期间，我们才能知道程序究竟会创建哪些对象，创建多少个对象，这部分内存的分配和回收是动态的。因此垃圾收集器所关注的正是这部分的内存改如何管理]]></description><category></category></item><item><title><![CDATA[JVM学习笔记二：HotSpot虚拟机对象]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/109109538</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/109109538</guid><author>Jason_Dom</author><pubDate>Thu, 22 Oct 2020 10:48:45 +0800</pubDate><description><![CDATA[一、对象的创建

当遇到new指令时，java虚拟机会去检查这个指令的参数能在常量池中定位到一个类的符号引用，同时检查是否已被加载、解析、和初始化过。若没有，则先执行相应的类加载过程。

再通过类加载的检查后，虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可完全确定。为对象分配空间等同于从Java堆中划分确定大小的内存块出来。

有两种分配方式，选择哪种方式由Java堆内存是否规整决定：

指针碰撞：当Java堆中内存绝对规整时，所有被使用过的内存都被放在一 边，空闲的内存被放在另一边，中间]]></description><category></category></item><item><title><![CDATA[JVM学习笔记一：JVM运行时数据区域]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/109013922</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/109013922</guid><author>Jason_Dom</author><pubDate>Sat, 17 Oct 2020 16:21:01 +0800</pubDate><description><![CDATA[一、架构

Java虚拟机所管理的内存包括以下几个运行时数据区域，如下图所示





1.程序计数器

程序计数器(Program Counter Register)是一块较小的内存空间，可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一套需要执行的字节码指令，他是程序控制流的指示器。


...]]></description><category></category></item><item><title><![CDATA[java.util.ConcurrentModificationException异常原因和解决方法]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/108914540</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/108914540</guid><author>Jason_Dom</author><pubDate>Fri, 09 Oct 2020 15:37:45 +0800</pubDate><description><![CDATA[public static List&lt;TreeModel&gt; formatDataStructure(List&lt;House&gt; houseList){
        Map&lt;String,Set&gt; checkDuplicates = new HashMap&lt;&gt;();
        List&lt;TreeModel&gt; resultTree = new ArrayList&lt;&gt;();
        houseList.forEach(hous.]]></description><category></category></item><item><title><![CDATA[Redis缓存问题及解决方法]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/108931647</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/108931647</guid><author>Jason_Dom</author><pubDate>Thu, 08 Oct 2020 23:20:28 +0800</pubDate><description><![CDATA[一、概念

缓存穿透：
	缓存击穿：
	缓存雪崩：
]]></description><category></category></item><item><title><![CDATA[Redis哨兵模式]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/108861363</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/108861363</guid><author>Jason_Dom</author><pubDate>Mon, 05 Oct 2020 19:11:51 +0800</pubDate><description><![CDATA[一、概念

哨兵模式本质上为主从复制模式的升级版本。在主从模式中，当master主服务器宕机后，slave从服务器无法自动切换成主服务器，因此引入哨兵（Sentinel）。使用一个或者多个哨兵（Sentinel）实例，对redis节点进行监控，在主节点出现故障后，能够将一个从节点升级为主节点，进行故障转移，保证系统可用性。

Redis的Sentinel系统用于管理多个Redis服务器，该系统具有以下功能：

监控(Monitoring)： 不断地检查主从节点实例是否按照预期正常运行工作。
	通知(Noti]]></description><category></category></item><item><title><![CDATA[Redis主从复制]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/108658631</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/108658631</guid><author>Jason_Dom</author><pubDate>Wed, 23 Sep 2020 23:12:12 +0800</pubDate><description><![CDATA[一、复制概念

说起Redis的数据备份，持久化主要用来解决Redis的单机备份，一旦该服务器挂了，数据就会全部丢失。

为了避免这种情况，于是就有了集群概念，将数据备份到多个不同服务器上。这样做的好处有两个：

保证数据保证，当主节点数据宕机时，自动连接到其他服务器
	
	通过复制功能，可能实现数据库的读写分离，主数据库主要做写操作，从数据库负责读操作。从而提高服务气的负载能力
	
数据的复制是单向的，只能从主节点复制到从节点。




...]]></description><category></category></item><item><title><![CDATA[Redis发布订阅模式（publish/subscribe）]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/108599666</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/108599666</guid><author>Jason_Dom</author><pubDate>Thu, 17 Sep 2020 10:51:42 +0800</pubDate><description><![CDATA[目录



一、概念

二、原理

三、推送的消息格式

四、发布订阅命令

1.发送消息

2.订阅频道

3.模式匹配

4.取消订阅

五、使用Jedis发布订阅命令

六、缺点

七、参考文档





一、概念

Redis发布/订阅（Pub/Sub）是一种通信机制，将数据推到某个信息管道中，其他客户端可通过订阅这些管道来获取推送信息，以此用于消息的传输。



由三部分组成：发布者（Publisher）、频道（Channel）、订阅者（Subscriber）。



发布者发布的消息分...]]></description><category></category></item><item><title><![CDATA[Redis持久化（RDB/AOF）]]></title><link>https://blog.youkuaiyun.com/Jason_Dom/article/details/108530145</link><guid>https://blog.youkuaiyun.com/Jason_Dom/article/details/108530145</guid><author>Jason_Dom</author><pubDate>Sun, 13 Sep 2020 16:51:56 +0800</pubDate><description><![CDATA[一、持久化目的

Redis是内存数据库，所有数据都是存储在内存中的，如果不定期将Redis中的数据库状态保存到磁盘，那么一旦服务器进程退出，就会导致数据的永久丢失。当下次Redis重启时，利用持久化文件实现数据恢复。除此之外，为了进行灾难备份，可以将持久化文件拷贝到一个远程位置。



二、持久化分类

Redis的持久化分为两种：

RDB持久化
	AOF持久化


1.RDB持久化

1.1.概念

又称快照持久化，是将当前进程汇总的数据生成快照保存到硬盘，保存的文件后缀名为rdb。



1....]]></description><category></category></item></channel></rss>