<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[PoisonLink的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/PoisonLink</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; PoisonLink]]></copyright><item><title><![CDATA[kafka]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106850880</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106850880</guid><author>PoisonLink</author><pubDate>Fri, 19 Jun 2020 10:19:29 +0800</pubDate><description><![CDATA[/**
  * 异步发送
  *
  * @param topic 主题
  * @param key key
  * @param value 消息内容
  *
  * @throws WebsocketException 入参不合法
  */

public void doProducer(KafkaProducerTopics topic,
             String key,
    String v...]]></description><category></category></item><item><title><![CDATA[HashMap解析]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106446433</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106446433</guid><author>PoisonLink</author><pubDate>Sat, 30 May 2020 20:23:55 +0800</pubDate><description><![CDATA[HashMap解析：

1.8之前 数组+链表；

1.8之后 数组+链表+红黑树；

初始化装载因子为0.75，初始容量为16，最大容量2的30次方；

















threshold:阈值，



扩容机制

初始容量16*0.75=12，桶的容量为16，记录大于12时即第一次扩容为32；

       32*0.75=24，桶的容量为32，记录大于24时第二次扩容为64；

       64*0.75=48 ，桶的容量为64，记录大于...]]></description><category></category></item><item><title><![CDATA[jvm调优参数]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106413158</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106413158</guid><author>PoisonLink</author><pubDate>Thu, 28 May 2020 20:49:34 +0800</pubDate><description><![CDATA[堆

-Xms:520M 初始堆内存
-Xmx:1024M 最大堆内存
-Xmn:256M 新生代大小
-XX:NewSize=256M 设置新生代初始大小
-XX:MaxNewSize=256M 设置新生代最大值内存
-XX:PermSize=256M 设置永久代初始值大小
-XX:MaxPermSize=256M 设置永久最大值大小
-XX:NewRatio=4 设置老年代和新生代的比值。表示老年代比新生代为4:1
-XX:SurvivorRatio=8 设置新生代中Survivor区和eden区的比值]]></description><category></category></item><item><title><![CDATA[类加载]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106412582</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106412582</guid><author>PoisonLink</author><pubDate>Thu, 28 May 2020 20:20:32 +0800</pubDate><description><![CDATA[类加载的时机                 

（1）遇到new， getstatic， putstatic或invokestatic这4条字节码指令时，如果类没有进行初始化，则需要先触发初始化。

这4条指令的最常见场景是：使用new关键字实例化对象、读取一个类的静态字段（非final）、设置一个类的静态字段（非final）

、调用一个类的静态方法。 上述非final的原因是final static修饰的字段在类加载的准备阶段会完成初始化。

（2）使用refl...]]></description><category></category></item><item><title><![CDATA[动态代理]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106409152</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106409152</guid><author>PoisonLink</author><pubDate>Thu, 28 May 2020 17:13:09 +0800</pubDate><description><![CDATA[基于JDK的动态代理

（1）要求要被代理的类必须有接口；如下：



（2）要被代理的类



（3）代理类实现InvocationHandler接口，重写invoke方法；还要求代理类持有被代理的类；



（4）测试类Main


]]></description><category></category></item><item><title><![CDATA[java---垃圾收集算法]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106407086</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106407086</guid><author>PoisonLink</author><pubDate>Thu, 28 May 2020 16:17:39 +0800</pubDate><description><![CDATA[标记---清除算法（Mark-Sweep）

算法：首先标记出所有需要回收的对象，在标记完成后，统一回收。

标记的过程是判断对象生存还是死亡，算法为引用计数算法（不用）和可达性分析算法。

不足：（1）效率问题，标记和清除的效率都不高。

     （2）空间问题，标记清除之后，会产生大量不连续的内存碎片，导致以后程序运行中，需要分配大量对象时，无法找到足够的内存空间，而不得不提前触发一次GC；

标记---整理算法（Mark-Compact）

算法：首先标记出需要回收的对象，然后将存活对象...]]></description><category></category></item><item><title><![CDATA[关于synchronized的理解]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106403216</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106403216</guid><author>PoisonLink</author><pubDate>Thu, 28 May 2020 15:24:19 +0800</pubDate><description><![CDATA[（1） 原理：synchronized关键字在经过编译之后，会在同步块的前后，分别形成monitorenter和monitorexit这两个字节码指令，这两个字节码指令都需要一个reference类型的参数，来指定要锁定和解锁的对象。

（2）使用：synchronized加锁分为对象锁、类锁、同步块；锁定的对象分别为对象，类，同步块内的参数；

（3）synchronized锁是非公平锁，也是重入锁；

（4）synchronized关键字是java里面的重量级锁，因为java线程是映射到操作系统的原..]]></description><category></category></item><item><title><![CDATA[wait、notify、notifyAll和sleep的区别与联系；]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/106401648</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/106401648</guid><author>PoisonLink</author><pubDate>Thu, 28 May 2020 11:53:41 +0800</pubDate><description><![CDATA[线程A获取对象objectA的锁，调用对象objectA的wait()方法，从而放弃了锁进入等待队列，线程A状态从运行中改为等待状态（备注：因为别的线程要notify唤醒，要获取锁，所以wait要释放锁）；

  线程B获取了对象objectA的锁，调用对象objectA的notify()方法，会唤醒等待队列的第一个线程A，等线程B的objectA同步块执行完后，此时大家会竞争CPU时间片，线程A此刻由等待状态转为阻塞状态，若线程A获取到CPU，则转为运行状态，且从wait()方法中返回；

若...]]></description><category></category></item><item><title><![CDATA[java向上与向下转型]]></title><link>https://blog.youkuaiyun.com/PoisonLink/article/details/78874908</link><guid>https://blog.youkuaiyun.com/PoisonLink/article/details/78874908</guid><author>PoisonLink</author><pubDate>Fri, 22 Dec 2017 16:48:03 +0800</pubDate><description><![CDATA[public class Dad {
public void say(){
System.out.println("i am dad");
        }
     }
public class Son extends Dad {
public void say(){
System.out.println("i am son");
       }
    }
public]]></description><category></category></item></channel></rss>