Java 进阶
文章平均质量分 89
Java 进阶
albon_arith
欢迎交流
展开
-
Java 随机数生成器 Random & SecureRandom 原理分析
文章目录java.util.Randomjava.Security.SecureRandom/dev/random 与 /dev/urandom资料Java 里提供了一些用于生成随机数的工具类,这里分析一下其实现原理,以及他们之间的区别、使用场景。java.util.RandomRandom 是比较常用的随机数生成类,它的基本信息在类的注释里都写到了,下面是 JDK8 里该类的注释:/**...原创 2019-06-22 21:04:27 · 37771 阅读 · 2 评论 -
Java 中的 SafePoint
SafePoint 介绍什么是 SafePoint?SafePoint 是 Java 代码中的一个线程可能暂停执行的位置。SafePoint 保存了在其他位置没有的一些运行时信息。SafePoint 保存了线程上下文中的任何东西,包括对象,指向对象或非对象的内部指针。在 JVM 处于 SafePoint 时,可以做什么呢?Garbage collection pausesCode de...原创 2019-06-15 22:26:04 · 2342 阅读 · 0 评论 -
DirectByteBuffer 里的堆外内存何时释放?
DirectByteBuffer 里的堆外内存何时释放?简要答案DirectByteBuffer 在分配堆外内存时:先要通过 Bits.reserveMemory 来看看是否还有可用的内存,是否达到了堆外内存的上限?有的话,占坑。通过 unsafe.allocateMemory 分配内存。创建 Cleaner,这个 Cleaner 就是用来管理堆外内存的。Cleaner 继承...原创 2018-03-11 22:14:07 · 1814 阅读 · 0 评论 -
《深入理解 Java 内存模型》笔记总结
简单的说,内存模型描述了某个程序的可能行为。内存模型包含一组规则,规定了一个线程的写操作何时对另一个线程可见。在程序行为满足这些规则的情况下,JVM 可以自由地进行代码转换,比如重排序和非必要的同步移除,代码转换往往是为了提升性能。原创 2017-10-31 10:29:14 · 474 阅读 · 0 评论 -
利用 Java Agent 和 Instrument 技术录制线上流量
利用 Java Agent 和 Instrument 技术录制线上流量Java Instrument 技术遇到的难题自动打包依赖ClassNotFound 问题HttpServletRequest body 只能 get 一次利用 Java Agent 和 Instrument 技术录制线上流量在做性能压测的时候,需要先准备好压测请求数据,可以采用人工制造的方式原创 2018-02-04 11:06:17 · 2253 阅读 · 0 评论 -
Java 并发框架 Disruptor 源码分析:RingBuffer
Disruptor 是一个高性能的线程间通信库。它来自于 LMAX 对并发、性能和非阻塞算法的研究,如今交易系统基础架构的核心部分。这里,我们围绕其基础数据结构 RingBuffer,深入源码学习一下其实现。原创 2017-10-17 20:05:08 · 2973 阅读 · 0 评论 -
Java 日志框架解析:设计模式、性能
在平常的系统开发中,日志起到了重要的作用,日志写得好对于线上问题追踪有着很大的帮助。一个好的日志框架,既要方便易用,也要有较好的性能,减少日志输出对系统内存、CPU 的影响。研究一款开源项目,学到的不仅仅是这个项目本身,还会学到很多设计思想,可以利用到日常工作中。原创 2017-09-28 10:00:54 · 5518 阅读 · 0 评论 -
深度剖析 JDK7 ConcurrentHashMap 中的知识点
看源码时候的一点儿总结:锁分离 Lock Stripping、Unsafe、自旋、顺序一致性 Sequential Consistency、权衡 Trade Offs。原创 2017-09-05 20:49:25 · 717 阅读 · 0 评论 -
Java 同步原语 synchronized 剖析和锁优化
本文解析了 synchronized 的底层实现,介绍了 JVM 中优化锁的一些方法,以及实际编程中使用的一些锁优化方法。原创 2017-09-10 10:36:05 · 1124 阅读 · 0 评论 -
Java 同步框架 AQS 深入分析
AQS 框架提供了先进先出的阻塞锁实现,在此基础上,提供了独占和共享等多种模式供使用方实现。除此之外,还提供了一个条件变量的实现。锁是一种线程同步机制,用于保护对临界资源的访问。条件变量提供了一个“等待 - 唤醒”的机制,在阻塞队列里起到了生产者和消费者之间的通信的作用。原创 2017-09-12 09:14:33 · 791 阅读 · 0 评论 -
Java 线程同步基础类 LockSupport 解析
LockSupport 类提供了基本的线程同步原语,是实现 AbstractQueuedSynchronizer 和 ReentrantLock 的基础。原创 2017-09-12 21:13:30 · 895 阅读 · 0 评论 -
降级熔断框架 Hystrix 源码解析:滑动窗口统计
一个滑动窗口统计主要分为两步:1. bucket 统计,bucket 的大小决定了滑动窗口滚动时间间隔;2. window 统计,window 的时长决定了包含的 bucket 的数目。Hystrix 实现滑动窗口利用了 RxJava 这个响应式函数编程框架。原创 2017-09-14 11:25:09 · 8579 阅读 · 2 评论 -
Java 注解:注解处理器获取泛型真实类型
注解 annotation 是 Java 中的一大特性,是插入代码中的元数据。注解的使用能够大大简化代码的编写,所以在很多框架中得到了使用,比如 spring、hibernate-validator。泛型的真实类型信息会在编译期间擦除,注解处理器正是运行在编译期间,能够用来获取泛型真实信息。原创 2017-09-17 16:30:31 · 6155 阅读 · 0 评论 -
Java 迭代器介绍
迭代器介绍迭代器模式迭代器模式是一个典型的设计模式,提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。因为屏蔽了细节,可以针对不同实现的容器,提供一致的标准化的访问方法。原创 2017-09-18 14:46:01 · 928 阅读 · 0 评论 -
深入理解 Java 泛型:类型擦除、通配符、运行时参数类型获取
泛型的本质是参数化类型,相比于直接使用 Object 的好处是:编译期强类型检查、无需进行显式类型转换。这里介绍一些泛型的用法、特性,以及如何在运行时获取泛型参数类型信息。原创 2017-09-21 10:00:58 · 3402 阅读 · 0 评论 -
Java 进阶:如何让线程主动让出 CPU
在 Java 中,有哪些方法可以让线程让出 CPU 呢?原创 2017-09-22 23:22:04 · 5787 阅读 · 0 评论 -
Java 进阶:异常影响性能吗?
Java 进阶:异常影响性能吗?曾经在给一个业务系统增加限流功能,使用的限流组件在流量超过阈值时,会直接抛异常,异常导致 CPU 占用率飙升。第一次遇到这样的情况,让我们不得不思考,异常怎么会对性能造成这么大的影响?下面我们写几个测试程序观察一下。原创 2017-09-24 10:31:26 · 10829 阅读 · 1 评论 -
关于 HTTP 长连接
使用长连接能够减少建立销毁连接的消耗,三次握手、四次挥手对性能影响是很大的。一般 RPC 如 Dubbo 默认都是长连接的,HTTP 1.1 之上也可以支持长连接了,HTTP 2.0 也支持了单一长连接的多路复用。一般 HTTP 服务前面都会挂 nginx 做负载均衡,那么长连接的设置也分为从客户端到 nginx、从 nginx 到服务端两部分。如果使用 Java 的 apache HTTPC...原创 2019-09-15 23:58:31 · 2739 阅读 · 0 评论