<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[一只海滩上的贝壳]]></title><description><![CDATA[在知识海洋的浅滩上汲取]]></description><link>https://blog.youkuaiyun.com/FoolishAndStupid</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FoolishAndStupid]]></copyright><item><title><![CDATA[jvm源码阅读笔记[7]-从jstat -gccause命令谈到jvm中都有哪些GC cause]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/78078238</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/78078238</guid><author>FoolishAndStupid</author><pubDate>Sun, 24 Sep 2017 17:44:32 +0800</pubDate><description><![CDATA[从零开始看源码，旨在从源码验证书上的结论，探索书上未知的细节。有疑问欢迎留言探讨 
      个人源码地址：https://github.com/FlashLightNing/openjdk-notes  
      还有一个openjdk6,7,8,9的地址：https://github.com/dmlloyd/openjdk 
       jvm源码阅读笔记[1]：如何触发一次CMS回收]]></description><category></category></item><item><title><![CDATA[jvm源码阅读笔记[6]-杂谈JIT中对Exception做的优化]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/78067913</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/78067913</guid><author>FoolishAndStupid</author><pubDate>Fri, 22 Sep 2017 23:29:17 +0800</pubDate><description><![CDATA[今天同事上线上看日志，发现一堆只打印了”java.lang.NullPointerException”的异常，代码里面确实捕获且调用了输出堆栈信息的方法，日志里面却没有堆栈信息，甚是困惑。另一个同事说他之前遇到过，好像是JIT优化的结果。搜了一下，找到这样一篇文章(http://jawspeak.com/2010/05/26/hotspot-caused-exceptions-to-lose-the]]></description><category></category></item><item><title><![CDATA[jvm源码阅读笔记[5]：内存分配失败触发的GC究竟对内存做了什么？]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77915227</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77915227</guid><author>FoolishAndStupid</author><pubDate>Sat, 09 Sep 2017 14:46:32 +0800</pubDate><description><![CDATA[从零开始看源码，旨在从源码验证书上的结论，探索书上未知的细节。有疑问欢迎留言探讨 
      个人源码地址：https://github.com/FlashLightNing/openjdk-notes  
      还有一个openjdk6,7,8,9的地址：https://github.com/dmlloyd/openjdk 
       jvm源码阅读笔记[1]：如何触发一次CMS回收]]></description><category></category></item><item><title><![CDATA[jvm源码阅读笔记[4]：从GC说到vm operation]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77826099</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77826099</guid><author>FoolishAndStupid</author><pubDate>Sun, 03 Sep 2017 21:57:55 +0800</pubDate><description><![CDATA[从零开始看源码，旨在从源码验证书上的结论，探索书上未知的细节。有疑问欢迎留言探讨 
      个人源码地址：https://github.com/FlashLightNing/openjdk-notes  
      还有一个openjdk6,7,8,9的地址：https://github.com/dmlloyd/openjdk 
       jvm源码阅读笔记[1]：如何触发一次CMS回收]]></description><category></category></item><item><title><![CDATA[jvm源码阅读笔记[3]：从内存分配到触发GC的细节]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77822827</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77822827</guid><author>FoolishAndStupid</author><pubDate>Sun, 03 Sep 2017 15:33:04 +0800</pubDate><description><![CDATA[从零开始看源码，旨在从源码验证书上的结论，探索书上未知的细节。有疑问欢迎留言探讨 
      个人源码地址：https://github.com/FlashLightNing/openjdk-notes  
      还有一个openjdk6,7,8,9的地址：https://github.com/dmlloyd/openjdk 
      jvm源码阅读笔记[1]：如何触发一次CMS回收]]></description><category></category></item><item><title><![CDATA[jvm源码阅读笔记[2]：你不知道的晋升阈值TenuringThreshold详解]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77596050</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77596050</guid><author>FoolishAndStupid</author><pubDate>Sat, 26 Aug 2017 10:00:52 +0800</pubDate><description><![CDATA[个人源码地址：https://github.com/FlashLightNing/openjdk-notes  
      还有一个openjdk6,7,8,9的地址：https://github.com/dmlloyd/openjdk 
      历史笔记： 
      jvm源码阅读笔记[1]：如何触发一次CMS回收
    大家都知道年轻代中经历了多次GC之后仍然没有被回收的对象就会晋升]]></description><category></category></item><item><title><![CDATA[jvm源码阅读笔记[1]：如何触发一次CMS回收]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77430875</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77430875</guid><author>FoolishAndStupid</author><pubDate>Sun, 20 Aug 2017 18:03:20 +0800</pubDate><description><![CDATA[个人源码地址：https://github.com/FlashLightNing/openjdk-notes  
      还有一个openjdk6,7,8,9的地址：https://github.com/dmlloyd/openjdk
    对于配置使用CMS回收器的应用，用jstack pid | grep GC 可以发现，有一个名为Concurrent Mark-Sweep GC Thre]]></description><category></category></item><item><title><![CDATA[Ubuntu下编译hotspot踩坑指南]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77151692</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/77151692</guid><author>FoolishAndStupid</author><pubDate>Sun, 13 Aug 2017 23:59:16 +0800</pubDate><description><![CDATA[折腾了2天，终于在ubuntu上编译hotspot成功了，中间踩了好多坑，资料也不好找啊，还是得跟书上和博客上的各种配置保持一致比较好，稍微有点不一样的地方，也许就是个坑！ 
     环境变量配置如下，各个参数的含义网上也都有，就不列举了。export LANG=C
export ALT_BOOTDIR=/home/lumingfeng/Downloads/jdk1.6.0_45export AL]]></description><category></category></item><item><title><![CDATA[RateLimiter源码阅读]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/76285690</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/76285690</guid><author>FoolishAndStupid</author><pubDate>Sat, 29 Jul 2017 00:30:33 +0800</pubDate><description><![CDATA[俗话说得好，缓存，限流和降级是系统的三把利剑。刚好项目中每天早上导出数据时因调订单接口频率过高，订单系统担心会对用户侧的使用造成影响，让我们对调用限速一下，所以就正好用上了。 
    常用的限流算法有2种：漏桶算法和令牌桶算法。    漏桶算法    漏桶算法：请求先进入“桶”中，然后桶以一定的速率处理请求。如果请求的速率过快会导致桶溢出。根据描述可以知道，漏桶算法会强制限制请求处理的速度。任你请]]></description><category></category></item><item><title><![CDATA[FutureTask与AQS不得不说的故事]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/76185217</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/76185217</guid><author>FoolishAndStupid</author><pubDate>Thu, 27 Jul 2017 13:33:48 +0800</pubDate><description><![CDATA[讲FutureTask之前，先讲讲Runnable，Callable，Future，FutureTask之间都是啥关系？ 
    在接触Callable之前，我们都说，开线程执行一个方法是获取不到返回值的。为什么这么说呢？ 
    首先是Runnable接口，我们一般实现该接口后都会重写run()方法，这里可以看到run()方法是没有返回值的。也就是说，如果你在run()方法里面，做了一次数据库]]></description><category></category></item><item><title><![CDATA[根据AQS推测Semaphore及源码分析]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/75809277</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/75809277</guid><author>FoolishAndStupid</author><pubDate>Sun, 23 Jul 2017 00:42:56 +0800</pubDate><description><![CDATA[Semaphore意为信号量，用法和CountDownLatch类似，也可以用来控制线程之间的协作关系，但通常用来控制同时访问的线程的数量。 
    先看看示例：]]></description><category></category></item><item><title><![CDATA[AQS简单总结]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/75676027</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/75676027</guid><author>FoolishAndStupid</author><pubDate>Sat, 22 Jul 2017 00:17:57 +0800</pubDate><description><![CDATA[AQS是j.u.c中几个并发类的基础，它们都继承了AbstractQueuedSynchronizer类，并且在其中实现了几个接口，然后在并发类中使用AQS的方法就可以达到操作线程阻塞或者唤醒的目的。这篇文章记的就是这些子类实现的接口是如何和AQS搭配起来使用的，从而实现AQS的效果。]]></description><category></category></item><item><title><![CDATA[A Work in Progress]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/74024841</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/74024841</guid><author>FoolishAndStupid</author><pubDate>Sat, 01 Jul 2017 02:07:39 +0800</pubDate><description><![CDATA[当你执行”java…”,就会创建一些垃圾回收线程。如果你想知道有多少GC线程，你可以使用-XX:+PrintFlagsFinal -version，然后在大量的输出结果里面找到ParallelGCThreads相关的。你会看到类似以下的结果：uintx Para]]></description><category></category></item><item><title><![CDATA[Our Collectors]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/74018499</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/74018499</guid><author>FoolishAndStupid</author><pubDate>Fri, 30 Jun 2017 23:50:45 +0800</pubDate><description><![CDATA[前段时间，我在给朋友讲解的时候，在白板上画了下面这个图。他们看起来（也许只是表现得）很喜欢，因此我想再给你们画一次。 
 
    每一个蓝色的盒子代表了一种用]]></description><category></category></item><item><title><![CDATA[根据AQS推测CountDownLatch及源码分析]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/73438020</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/73438020</guid><author>FoolishAndStupid</author><pubDate>Sun, 18 Jun 2017 20:23:03 +0800</pubDate><description><![CDATA[CountDownLatch是一个同步工具类，它允许一个或多个线程一直等待，直到其他线程的操作执行完后再执行。 
    CountDownLatch是通过一个计数器来实现的，计数器的初始值为线程的数量。每当一个线程完成了自己的任务后，计数器的值就会减1。当计数器值到达0时，它表示所有的线程已经完成了任务，然后在闭锁上等待的线程就可以恢复执行任务。 
    来看一下它是怎么利用AQS实现的。]]></description><category></category></item><item><title><![CDATA[揭下ReentrantLock神秘的面纱]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/73381629</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/73381629</guid><author>FoolishAndStupid</author><pubDate>Sat, 17 Jun 2017 16:51:53 +0800</pubDate><description><![CDATA[结论    先给出结论。综合起来，ReentrantLock是一个独占锁，可重入锁，且有公平锁和非公平锁之分。 
    公平锁和非公平锁各自是怎么实现的呢？非公平锁中，某一线程调用lock()时就会使用CAS尝试获取锁（不管锁当前是否空闲），获取失败才会加入到队列中等待。而在公平锁中，某一线程调用lock()时，只有在当前锁是空闲时，且等待队列中没有其他线程才会使用CAS去获取，如果等待队列中有其]]></description><category></category></item><item><title><![CDATA[GC系列：如何优化引用计数算法（1）]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72853420</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72853420</guid><author>FoolishAndStupid</author><pubDate>Sat, 03 Jun 2017 17:45:21 +0800</pubDate><description><![CDATA[引言    标记-清除，标记-整理，复制式回收算法都是属于间接式的：先从根集合出发，遍历根集合图，找到存活的对象，再反向确定出死亡的对象。而引用计数算法则可以通过引用关系的创建和删除直接确定对象的存活状态，而不用像追踪式回收器一样。 
    在引用计数算法中，每个对象都维护了一个引用计数器，该值通常在对象头中。    伪代码简单的引用计数算法
New()://创建对象
    ref=alloca]]></description><category></category></item><item><title><![CDATA[学习使用greys排查线上问题]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72849428</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72849428</guid><author>FoolishAndStupid</author><pubDate>Sat, 03 Jun 2017 01:00:48 +0800</pubDate><description><![CDATA[Greys是一个JVM进程执行过程中的异常诊断工具。 在不中断程序执行(不重启服务)的情况下轻松完成JVM相关问题排查工作。安装和启动下载greys脚本：
curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|sh启动脚本：
./greys.sh pid如何获取pid:
ps -ef|grep java 
然后从输出中找到你需要的Java进程]]></description><category></category></item><item><title><![CDATA[GC系列：如何优化标记-整理算法]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72629980</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72629980</guid><author>FoolishAndStupid</author><pubDate>Mon, 22 May 2017 20:51:45 +0800</pubDate><description><![CDATA[标记-整理算法有一个整理对象，避免产生内存碎片的过程，那么回收器是怎么整理对象的？整理算法又是怎么区分性能好坏的？整理过程大概需要哪几个步骤？]]></description><category></category></item><item><title><![CDATA[深入了解标记-清扫回收算法]]></title><link>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72571480</link><guid>https://blog.youkuaiyun.com/FoolishAndStupid/article/details/72571480</guid><author>FoolishAndStupid</author><pubDate>Sat, 20 May 2017 11:06:36 +0800</pubDate><description><![CDATA[摘自《the garbage collection handbook》 
    之前对标记-清扫回收算法的理解只是读完《深入理解Java虚拟机》里面的介绍，而对里面的很多细节不甚了解。看了《the garbage collection handbook》才知道里面还大有名堂。标记-清扫是怎么标记的？标记位在哪？标记过程有什么优化方法？清扫过程如何清扫？怎样优化清扫过程？回收器又是怎么和分配对象空间]]></description><category></category></item></channel></rss>