<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[aaaPostcard的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/aaaPostcard</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aaaPostcard]]></copyright><item><title><![CDATA[垃圾收集篇]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/140083165</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/140083165</guid><author>aaaPostcard</author><pubDate>Sun, 14 Jul 2024 21:57:50 +0800</pubDate><description><![CDATA[文章目录垃圾收集算法垃圾的概念对象存活的判断引用计数器法可达性分析算法算法标记清除算法复制算法标记压缩算法垃圾收集的相关概念STW安全点安全区域垃圾收集器重要指标吞吐量停顿时间垃圾收集器的分类Serial 收集器：串行回收ParNew 收集器：并行回收Parallel Scavenge 收集器：吞吐量优先CMS收集器：低延迟G1 收集器：区域化分代
垃圾收集算法
垃圾的概念
  在运行的程序中，当一个对象没有任何指针指向它时，它就会被视为垃圾。所以，判断一个对象是否被视为垃圾的关键标准就是是否由指针指向它。]]></description><category></category></item><item><title><![CDATA[方法区讲解]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/139884277</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/139884277</guid><author>aaaPostcard</author><pubDate>Sat, 22 Jun 2024 18:35:15 +0800</pubDate><description><![CDATA[栈、堆、方法区三者之间的关系如上图所示， 第一个Student代表类型，存放在方法区中， student 变量是在虚拟机栈中，最后 new 出来的Student对象放在堆中。本篇主要讲一下有关方法区中的知识。]]></description><category></category></item><item><title><![CDATA[运行时数据区]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/137410633</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/137410633</guid><author>aaaPostcard</author><pubDate>Sun, 16 Jun 2024 19:44:04 +0800</pubDate><description><![CDATA[分配完内存之后，jvm将分配的内存空间设置为零值（null），接下来，jvm要对对象的对象头（Object header）进行设置，这一套操作下来，从jvm的角度来看，对象已经创建完成了，但从java的角度来看，对象创建才刚刚开始，所以一般new之后，就会执行方法，即对成员变量进行赋值。操作数栈也被称为操作栈，它是一个先入后出的栈，同局部变量表一样，操作数栈的最大深度也是在编译期间就已经确定了，32位数据类型所占栈的容量为1，64位所占为2，在方法执行的时候，操作数栈的深度不会超过栈的最大深度。]]></description><category></category></item><item><title><![CDATA[设计模式篇---观察者模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/136273358</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/136273358</guid><author>aaaPostcard</author><pubDate>Sat, 24 Feb 2024 18:41:26 +0800</pubDate><description><![CDATA[观察者模式的优点：1、表示层和数据逻辑层分离，并抽象了更新的接口，便于不同的表示层充当观察者角色。2、在观察目标和观察者之间建立了一个抽象的耦合。观察者目标只需要维护一个抽象的观察者集合即可，无需了解具体观察者。3、简化了一对多系统的难度，支持广播通信。4、符合开闭原则，增加新的观察者无需修改原代码。观察者模式的缺点：1、观察者太多的话，有性能问题。2、如果观察者和观察目标之间存在循环依赖，可能导致系统崩溃。]]></description><category></category></item><item><title><![CDATA[《如何成为不完美主义者》总结]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/136105976</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/136105976</guid><author>aaaPostcard</author><pubDate>Sat, 17 Feb 2024 14:22:41 +0800</pubDate><description><![CDATA[比如完美的社交主义者，他们的社交标准就是每次交流都能流畅无比（具体期待），长期以往就会形成一个恶性循环，每次与人交流时，他们的内心期待都会瞬间崩塌，一张嘴，要么内容欠缺，要么表达有误，要么话题无聊，要么紧张慌乱，这就是太高的具体期待，这样收获会更少，因为他们在期待与一个不完美的人打交道的不完美的世界里做到完美。关注过程，看淡结果。获得认同的主要原因有两个：1、他们缺乏自尊和自信，需要用自己的行为来获得他人的认可，比起自己的想法，他们更在意别人的意见，然而，从他人获得的信心与自己的信心是两码事。]]></description><category></category></item><item><title><![CDATA[设计模式篇---备忘录模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/135841924</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/135841924</guid><author>aaaPostcard</author><pubDate>Tue, 30 Jan 2024 13:29:31 +0800</pubDate><description><![CDATA[【原发器】就是我们要进行备份的东西，【备忘录】和【原发器】基本是一样的，只不过可以把它理解为【原发器】的备份，【负责人】就是客户端的入口，通过它来进行备份和保存，但是它关联的是【备忘录】，并不是【原发器】。当我们保存一个对象在某一时刻的全部状态或部分状态，需要以后它能够恢复到先前的状态时，可以考虑备忘录模式。]]></description><category></category></item><item><title><![CDATA[设计模式篇---中介者模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/135731242</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/135731242</guid><author>aaaPostcard</author><pubDate>Sun, 21 Jan 2024 18:02:32 +0800</pubDate><description><![CDATA[中介者模式将一个网状的系统结构变成了一个以中介者对象为中心的星型结构，也是一个“迪米特法则”应用的标准模式，各个对象之间不需要耦合，它们之间的沟通仅需要中介者即可。但因为中介者本身需要关联大量的对象，导致后续的维护比较困难。因此也可以做一个小个改善，将变的地方放到配置中进行维护。//放到配置中心@Override});]]></description><category></category></item><item><title><![CDATA[设计模式篇---命令模式(结合spring+动态代理实现开闭)]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/135172065</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/135172065</guid><author>aaaPostcard</author><pubDate>Fri, 05 Jan 2024 13:22:16 +0800</pubDate><description><![CDATA[命令模式可以降低系统的耦合度，让请求者和接收者完全解耦，并且如果有新的命令加进来，也不用修改之前的代码，符合开闭原则。命令模式和外观模式有些类似，都是通过中间一个对象进行解耦。命令模式更适合操作的切换，比如开关用来开灯，也可以用来开电视，开关作为调用者，可以调用开灯的命令，也可以调用开电视的命令，让调用者和接收者解耦。外观模式更类似一组操作的集合，比如到家后，先换拖鞋，再开电视，最后坐在沙发上，这一系列的操作，可以放在外观层实现，让调用者和具体的子系统解耦。]]></description><category></category></item><item><title><![CDATA[设计模式篇---职责链模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/134969691</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/134969691</guid><author>aaaPostcard</author><pubDate>Sat, 23 Dec 2023 17:27:25 +0800</pubDate><description><![CDATA[职责链模式通过建立一条链来组织请求的处理者，请求将沿着链进行传递。请求发送者无需知道请求被谁处理，实现了请求发送者和处理者之间的解耦。使用场景：1、当多个对象可以处理同一个请求，但每个对象处理的方式、时机不同，可以考虑使用职责链。2、在不明确指定接受者的情况下向多个对象中的一个提交一个请求。3、可动态指定一组对象处理请求，客户端动态的创建职责链来处理请求，还可以改变链中处理者之间的先后顺序。]]></description><category></category></item><item><title><![CDATA[设计模式篇---代理模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/134911574</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/134911574</guid><author>aaaPostcard</author><pubDate>Sun, 10 Dec 2023 19:30:52 +0800</pubDate><description><![CDATA[静态代理比较好理解，代理类里面实现了代理的方法。而动态代理的代理对象是通过Proxy创建的，代理的方法是在InvocationHandler里的invoke方法里，和静态代理对比的话，代理类和代理方法是分离开的。]]></description><category></category></item><item><title><![CDATA[设计模式篇---享元模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/134829068</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/134829068</guid><author>aaaPostcard</author><pubDate>Sun, 10 Dec 2023 16:53:54 +0800</pubDate><description><![CDATA[当需要创建大量重复对象的时候，可以考虑使用享元模式。java中的String类，也是用了享元模式。当我们创建一个字符串，如果这个字符串对象第一次创建的话，就会放到享元池中，下次再创建内容相同的字符串对象，新创建的对象就会将它的引用指向第一次创建的对象，不会分配新的内存，以此来实现字符串的共享。打印结果：第三个为false，是因为一开始str4是一个对象，和str1的初始值不同，所以这两个的地址是不一样的。]]></description><category></category></item><item><title><![CDATA[设计模式篇---外观模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/134505310</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/134505310</guid><author>aaaPostcard</author><pubDate>Wed, 22 Nov 2023 13:17:30 +0800</pubDate><description><![CDATA[优点：1、它对客户端屏蔽了子系统，减少了客户端所需处理的对象数目，客户端代码变得很简单。2、它实现了子系统和客户端的松耦合关系，使得子系统的变化不会影响到客户端，只需要更改外观类即可。缺点：1、违背开闭原则，有新的子系统加入需要修改外观类。外观模式和建造者模式的思路很相似。外观模式是将复杂的子系统操作给外观类，客户端直接调用外观类即可；建造者模式是将复杂的操作给指挥者，指挥者内部指挥建造者创建，客户端直接关联指挥者即可。]]></description><category></category></item><item><title><![CDATA[设计模式篇---装饰模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/134375009</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/134375009</guid><author>aaaPostcard</author><pubDate>Fri, 17 Nov 2023 13:23:26 +0800</pubDate><description><![CDATA[装饰模式的链路主要是通过继承方式实现的，主要思路是在装饰者类里面包了一层被装饰者，然后客户端调用装饰者的方法时，先实现装饰者自己的装饰方法，然后再实现被装饰者的方法。装饰者模式和代理模式很相似，装饰者是装饰类和被装饰类实现了相同的接口，代理是代理类和被代理类实现了相同的接口，都是增强了能力，但前者是增强了自己，让自己有更多的自定义能力，后者是让别人去处理自己的事情。一个是让自己能力变强，一个是让别人替自己办事。]]></description><category></category></item><item><title><![CDATA[设计模式篇---组合模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/133963630</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/133963630</guid><author>aaaPostcard</author><pubDate>Sat, 21 Oct 2023 18:11:00 +0800</pubDate><description><![CDATA[组合模式很适用于处理树形结构的业务场景，主要组件为容器组件和叶子组件，从容器组件开始遍历，一层一层的处理当前组件的业务场景。如果想要扩展新的组件，也无需修改代码，符合开闭原则。当树形结构或者具有整体和部分的层次结构时，希望忽略整体和部分的差异，被客户端一致的对待，可以考虑使用组合模式。]]></description><category></category></item><item><title><![CDATA[@Cleanup() 使用注意事项]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/133962559</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/133962559</guid><author>aaaPostcard</author><pubDate>Sat, 21 Oct 2023 16:04:59 +0800</pubDate><description><![CDATA[前端时间用lombok 的@Cleanup() 想实现线程池的自动关闭，因为使用不当，查bug查了好久，因此写篇博客纪念下，同时也希望读者可以跳过这个坑。@Cleanup修饰的对象，可以在对象资源使用结束后，自动关闭。]]></description><category></category></item><item><title><![CDATA[《自控力》读后感]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/132406217</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/132406217</guid><author>aaaPostcard</author><pubDate>Sat, 21 Oct 2023 15:47:41 +0800</pubDate><description><![CDATA[最近读完了《自控力》这本书，读之前，我抱的期望并不太高，本以为是碗鸡汤，没啥本质的效果，并且外国的书读起来很费劲，啰里八嗦的。当我读了一部分后，思想开始发生了改变，这本书很少有观点，更多的是数据的论证，很客观，感觉还是有必要总结下的。外国人的思维和中国人思维确实有很大的不同，外国的大部分书籍中传达的更多的是让我们接纳自己，做自己就好，不需要得到别人的认可，就像《被讨厌的勇气》这本书一样，并不要总从自己身上找原因，自己已经很棒了。中国的书更看重的是教我们方法，教我们如何成为优秀的人。]]></description><category></category></item><item><title><![CDATA[设计模式篇---桥接模式]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/132525794</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/132525794</guid><author>aaaPostcard</author><pubDate>Sun, 24 Sep 2023 16:09:58 +0800</pubDate><description><![CDATA[在使用桥接模式时应该识别出一个类具有两个独立的变化维度，就比如毛笔本身具有一个维度，需要画出颜色就需要另外一个维度–颜色，颜色本身并不属于毛笔中的属性，它和毛笔本身是一个“设置”关系，所以它也可以作为一个抽象类，和毛笔进行桥接。桥接模式使用的场景：1、如果一个系统需要在抽象化和具体化之间增加更多的灵活性，可以考虑通过桥接模式使它们建立一个抽象的管理关系。2、抽象部分和被“设置”部分可以通过继承的方式独立扩展而不相互影响。3、一个类存在多个独立的变化维度，而这些维度需要独立的进行扩展。]]></description><category></category></item><item><title><![CDATA[设计模式篇---抽象工厂(包含优化)]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/132381905</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/132381905</guid><author>aaaPostcard</author><pubDate>Sat, 19 Aug 2023 19:55:38 +0800</pubDate><description><![CDATA[优化抽象工厂]]></description><category></category></item><item><title><![CDATA[正则表达式必知必会]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/132131996</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/132131996</guid><author>aaaPostcard</author><pubDate>Sun, 06 Aug 2023 19:58:05 +0800</pubDate><description><![CDATA[常用的正则表达式]]></description><category></category></item><item><title><![CDATA[设计模式篇---工厂方法(包含优化)]]></title><link>https://blog.youkuaiyun.com/aaaPostcard/article/details/131869910</link><guid>https://blog.youkuaiyun.com/aaaPostcard/article/details/131869910</guid><author>aaaPostcard</author><pubDate>Sat, 22 Jul 2023 18:33:14 +0800</pubDate><description><![CDATA[里氏替换：子类型必须能够替换掉他们的基类型。依赖倒置：高层模块不应该依赖低层模块，二者都应该依赖其抽象。抽象不应该依赖细节，细节应该依赖抽象工厂方法比简单工厂更符合开闭原则，当有新的需求时，不用修改之前代码。客户端关注的是抽象的产品，具体工厂里返回的是具体的产品，这就必须让子产品永远可以替代父产品，我们维护每一个工厂类都是在管理具体的子产品。具体工厂对应抽象工厂也是同理。这就是里氏替换的应用。]]></description><category></category></item></channel></rss>