- 博客(10)
- 资源 (11)
- 收藏
- 关注
原创 Java集合:(二) LinkedList源码解析(JDK8)
LinkedList 底层是双向链表,它的增删只需要移动指针即可,故时间效率较高。不需要批量扩容,也不需要预留空间,所以空间效率比ArrayList高。缺点就是需要随机访问元素时,时间效率很低,虽然底层在根据下标查询Node的时候,会根据index判断目标Node在前半段还是后半段,然后决定是顺序还是逆序查询,以提升时间效率。不过随着n的增大,总体时间效率依然很低。源码分析成员变量transient int size = 0; // 当前元素个数transient Node<E>
2021-02-25 21:06:19 159
原创 Java集合:(一) ArrayList源码解析(JDK8)
ArrayList概述ArrayList 是一个动态数组,它是线程不安全的,允许元素为null。底层数据结构依然是数组,它是占据一块连续的内存空间(容量就是数组的length),所以它也有数组的缺点,空间效率不高。由于数组的内存连续,可以根据下标以O1的时间读写(改查)元素,因此时间效率很高。当集合中的元素超出这个容量,便会进行扩容操作。扩容操作也是ArrayList 的一个性能消耗比较大的地方,所以若我们可以提前预知数据的规模,应该通过public ArrayList(int initialCapac
2021-02-25 21:00:37 178
原创 Javassist 文档
本文属于摘抄的文档,如有侵权请联系,删除!!!Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。它可以用来检查、”动态”修改以及创建 Java类。其功能与jdk自带的反射功能类似,但比反射功能更强大。我靠Javassist实现的一个仿照JDK Proxy动态代理的demo,建议
2021-02-25 20:54:57 177
原创 自己实现Java 动态代理 Proxy
jdk Proxy的源码解析在下面这篇文章。建议看完在看今天的自己实现,否则可能会看不懂。Java 动态代理 Proxy源码详解开始动手InvocationHandler接口,替换jdk的。package debug_jdk8;import java.lang.reflect.Method;public interface InvocationHandler { public Object invoke(Object proxy, Method method, Object[] args
2021-02-25 20:51:30 215
原创 Java 动态代理 Proxy源码详解
代理简介?我们知道nginx可以实现正向,反向代理。比如我们想请求服务中一个tomcat,一般就是直接访问机器的ip,如果是代理的话,就是先访问中间代理层(nginx),然后nignx跳转到我们的tomcat机器。代理模式也是如此,也有一个Proxy层,通过Proxy层来真正访问我们的类接口。为什么要有代理?我们先看nginx实现的代理,他可以事先为我们做很多ip黑名单过滤,负载均衡,权限,甚至我们还可以到代理层改变我们http接口信息。java的Proxy也是如此,可以在访问真正类的时候做一些前置和
2021-02-25 20:35:47 671 1
原创 hashCode 原理
网上一般都说hashCode 就是对象的内存地址,但是你想下垃圾回收时(复制算法,整理算法)都要发生对象移动,都要改变对象的内存地址。但hashCode又不能变化,那么该值一定是被保存在对象的某个地方了。hashcode就是保存在对象头里面的,但是如果hashcode是内存地址的话,那么就有可能会重复到之前回收对象的地址。对象头详解见此文章synchronized 原理 锁升级 详解苍天可见,hashcode绝对不是简简单单的内存地址。hashcode的6种生成策略可以通过在JVM启动参数中添加
2021-02-25 20:26:56 1338
原创 TransmittableThreadLocal 源码分析
一. TransmittableThreadLocal 简介传统的jdk的ThreadLocal只能解决线程或者父,子线程之间的数据传递。 而 TransmittableThreadLocal 是为了解决 线程池里面的线程之间传递ThreadLocal。二. 实例带入public static void main(String[] args) throws Exception { ThreadLocal<String> THREAD_LOCAL = new Transmit
2021-02-25 20:19:59 554
原创 java子线程中获取父线程的threadLocal中的值
一. 实例带入 public static void main(String[] args) throws Exception { final ThreadLocal<String> threadLocal = new ThreadLocal<>(); threadLocal.set("aa"); new Thread() { public void run() { System
2021-02-25 20:11:23 314
原创 Java ThreadLocal源码分析
一. 要搞清楚的问题?ThreadLocal数据导致怎么存储的?源码是如何实现的?ThreadLocal为什么会内存泄漏?二. 请看一个实例 public static void main(String[] args) throws Exception { final ThreadLocal<String> mainThreadLocal = new ThreadLocal<String>(); mainThreadLocal.set("
2021-02-25 20:08:47 115
原创 java 反射 Method invoke 源码分析
1.先来看一个例子package arithmetics;public class AgentToolsTest { public void hello(int i) { System.err.println("第" + i+" 次 hello"); } public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName("a
2021-02-25 20:00:36 317
动态注册dubbo提供者接口
2019-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人