
Java
狂飙的dali
这个作者很懒,什么都没留下…
展开
-
GC Roots
在java中,可作为GC Roots的对象有:1.虚拟机栈(栈帧中的本地变量表)中引用的对象;2.方法区中的类静态属性引用的对象;3.方法区中常量引用的对象;4.本地方法栈中JNI(即一般说的Native方法)中引用的对象...转载 2019-05-07 10:12:12 · 1346 阅读 · 0 评论 -
GC新生代对象晋升到老年代情况总结
对象优先在Eden分配,且新生代对象晋升到老年代有多种情况,现在做一个总结:(1)、Eden区满时,进行Minor GC,当Eden和一个Survivor区中依然存活的对象无法放入到Survivor中,则通过分配担保机制提前转移到老年代中。(2)、若对象体积太大, 新生代无法容纳这个对象,-XX:PretenureSizeThreshold即对象的大小大于此值, 就会绕过新生代, 直接在老年...转载 2019-04-23 20:29:04 · 1469 阅读 · 0 评论 -
Java 中List/Map/Stack/LinkedList的方法
经常记不清楚常用集合的添加和删除等接口,在这里记一下ListE set(int index, E element);boolean add(E e);void add(int index, E element);boolean addAll(Collection<? extends E> c);E remove(int index);boolean removeAll...原创 2019-04-23 20:15:08 · 180 阅读 · 0 评论 -
ThreadPoolExecutor 的4种拒绝策略
ThreadPoolExecutor的拒绝策略是在工作队列满并且线程个数达到max时,再次添加时触发。通过设置RejectedExecutionHandler,RejectedExecutionHandler有四个已有的实现CallerRunsPolicy:在调用线程执行任务AbortPolicy:拒绝任务,并抛出异常,为默认的策略DiscardPolicy:抛弃当前任务Discard...原创 2019-04-23 17:49:30 · 756 阅读 · 0 评论 -
RateLimiter限流 - 令牌桶
简介限流算法除了令牌桶还有其他的,但据我所知比较优雅的是令牌桶算法。令牌桶算法的基本思路是:假设有一个桶存放令牌,按照固定频率(1/qps)向桶中放入令牌,处理请求时,先从令牌桶中获取令牌,如果获取到直接执行,否则等待,直到获取到所需令牌。guava 中的 RateLimiter就是基于令牌桶实现的,下面主要描述具体实现,使用的细节不再赘述细节这里有几个细节:令牌桶是有容量限制的...原创 2019-04-23 17:40:06 · 1113 阅读 · 0 评论 -
Java并发编程
并发编程的常用工具:synchronizedvolatileReentrantLock/ReentrantReadWriteLockCountdownLatchCyclicBarrierSemaphore原创 2019-04-23 17:23:04 · 130 阅读 · 0 评论 -
shutdownhook一个问题的调查
过程记录代码中在shutdown hook的过程中有使用到System.exit(1);但无法正确退出。在使用关闭钩子还要注意以下几点:不能在钩子调用System.exit(),否则卡住JVM的关闭过程,但是可以调用Runtime.halt()。不能再钩子中再进行钩子的添加和删掉操作,否则将会抛出IllegalStateException。在System.exit()之后添加的钩子无...原创 2019-04-15 17:55:39 · 573 阅读 · 0 评论 -
String/StringBuffer/StringBuilder的区别
简单区分String: 字符串,一旦创建不可更改StringBuffer:字符串构造器,可以修改字符串内容,线程安全StringBuilder:同StringBuffer,线程不安全String由于创建之后不可更改,所以改变String的操作其实是新生成了一个新的String对象,所以频繁改变的字符串建议使用StringBuffer/StringBuider。StringBuffer V...原创 2019-01-25 18:15:27 · 315 阅读 · 0 评论 -
Java类加载机制(类加载过程)
最近感觉只是没有系统化,从类加载开始把一些只是梳理一下。类加载机制是做什么的原创 2019-04-08 22:35:29 · 146 阅读 · 0 评论 -
List/Map 遍历
List遍历方法有三种: 1. for-each 2. 迭代器 Iterator(ListIterator) 3. for首选for-each需要用到迭代器方法时用迭代器,比如next,remove(,add,set)在遍历过程中需要利用索引进行计算,或显示控制索引for 循环的时候用到了list.get(i),如果这个list不是ArrayList,而是LinkedList...原创 2018-02-23 17:52:54 · 833 阅读 · 0 评论 -
awaitility
Awaitility is a small Java DSL for synchronizing asynchronous operationshttps://github.com/awaitility/awaitility这个工具很容易的实现将异步操作同步化,在自动化测试的时候很方便,如:await().atMost(10, SECONDS).until(map::isEmpty);...原创 2018-02-23 16:30:03 · 304 阅读 · 0 评论 -
后端好文记录
定时器:https://www.cnkirito.moe/timer/kafka时间轮:https://blog.youkuaiyun.com/u013256816/article/details/80697456G1:https://tech.meituan.com/2016/09/23/g1.htmlhttp://www.importnew.com/27793.html多线程:https://ww...原创 2019-05-25 13:36:02 · 171 阅读 · 0 评论