java
文章平均质量分 87
「已注销」
这个作者很懒,什么都没留下…
展开
-
类加载机制
1、虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制;2、与那些在编译器需要进行连接工作的语言不同,在java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度的灵活性,java里天生可以动态扩展的语言原创 2017-12-11 11:05:13 · 130 阅读 · 0 评论 -
RateLimiter限流
常用的限流算法有2种:漏桶算法和令牌桶算法。漏桶算法 漏桶算法:请求先进入“桶”中,然后桶以一定的速率处理请求。如果请求的速率过快会导致桶溢出。根据描述可以知道,漏桶算法会强制限制请求处理的速度。任你请求的再快还是再慢,我都是以这种速率来处理。 但是对于很多情况下,除了要求能够限制平均处理速度外,还要求能允许一定程度的的突发情况。这样的话,漏桶算法就不合适了,用令牌桶算原创 2017-12-11 17:17:59 · 602 阅读 · 0 评论 -
java 内存分配与回收
1、如何判断对象可回收1)引用计数算法:给对象添加一个引用计数器,每当一个地方引用,计数器值加一;当引用失效时,计数器值就减一。实现简单,判定效率高,但无法解决对象之间循环引用的问题。所以主流的java虚拟机没用选用该算法来管理内存。2)可达性分析算法:通过一系列的被称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Root原创 2017-12-12 18:00:34 · 297 阅读 · 0 评论 -
Java线程状态分析
Java线程的生命周期中,存在几种状态。在Thread类里有一个枚举类型State,定义了线程的几种状态,分别有:NEW: 线程创建之后,但是还没有启动(not yet started)。这时候它的状态就是NEWRUNNABLE: 正在Java虚拟机下跑任务的线程的状态。在RUNNABLE状态下的线程可能会处于等待状态, 因为它正在等待一些系统资源的释放,比如IOBLOCKED: 阻塞状态转载 2017-12-13 17:42:43 · 218 阅读 · 0 评论 -
volatile、synchronized与锁
1、volatile保证共享变量的可见性,比Synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度;2、一个字段被声明城volatile类型,java的线程内存模型确保所有线程看到这个变量的值是一致的;3、java中的每一个对象都可以作为锁,任何对象都有一个monitor与之关联,当monitor被持有后,其对象处于锁定状态;4、synchronized用的原创 2017-12-07 17:52:21 · 131 阅读 · 0 评论 -
HashMap与ConcurrentHashMap
1、HashMap 底层采用数组实现,每个元素是一个链表结构(用来处理hash冲突);2、在多线程环境下,HashMap的put操作会引起死循环,因为put操作可能导致扩容resize,扩容时在将老数据迁往新数组时,entry的next节点可能会因为多线程操作导致永不为空,就会产生死循环,导致cpu使用率飙升;3、HashMap是插入元素后,再判断是否需要扩容;1、Concur原创 2017-12-07 17:43:13 · 141 阅读 · 0 评论