
JAVA
文章平均质量分 77
ByteBlossom
这个作者很懒,什么都没留下…
展开
-
反射&泛型
Clazz.getDeclared(构造函数,方法属性等)和直接get构造函数,方法属性等的区别是前者可以得到类本身所有类型的成员,不能取到父类的属性,而后者只能得到public 修饰的,可以得到包括父类的属性。当使用new 对象时需要构造函数是public 的,而当变成私有时再new则会报错。反射通过私有构造方法创建对象,破环单例模式。class 包含哪些内容?原创 2024-11-27 19:13:06 · 340 阅读 · 0 评论 -
多线程常见问题集
乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或CAS算法)。当多个线程同时使用CAS操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。原创 2024-11-26 21:54:46 · 714 阅读 · 0 评论 -
HashMap源码解析
当然,还有一个限制,就是 binCount >= TREEIFY_THRESHOLD - 1 ,首先我们要说明的是,binCount是从0开始的,p是链表中的第一个元素,所以binCount==0时,添加p.next=newNode(...)成功后,则链表中就存在2个节点了,而TREEIFY_THRESHOLD默认值为8,只要 binCount >= 8-1 ,则尝试转变红黑树(是否转变,还要看treeifyBin里面的逻辑)。如果都没有与待插入的key值相同,则创建新的Node,插入到链表的结尾。原创 2024-11-24 10:34:38 · 608 阅读 · 0 评论 -
JVM内垃圾回收算法
③对于大量的零散小对象,栈上分配提供了一种很好的对象分配优化策略,栈上分配速度快,并且可以有效避免GC带来的负面影响,但是由于和堆空间相比,栈空间较小,因此对于大对象无法也不适合在栈上分配。-XX:MaxGCPauseMillis:最大的垃圾收集暂停时间,它是一个大于0的整数,ParallelGC会根据设置的值来调整堆的大小和其他jvm参数,使其把GC停顿时间控制在MaxGCPauseMillis之内,但是大家要注意,如果将值设置很小,虽然停顿时间小了,却造成初始化的堆也变小了,垃圾回收会变得很频繁。原创 2024-11-16 19:34:52 · 936 阅读 · 0 评论 -
什么是序列化?什么是反序列化?
Kryo 是专门针对 Java 语言序列化方式并且性能非常好,如果你的应用是专门针对 Java 语言的话可以考虑使用,并且 Dubbo 官网的一篇文章中提到说推荐使用 Kryo 作为生产环境的序列化方式。(文章地址:https://dubbo.apache.org/zh/docs/v2.7/user/references/protocol/rest/[5])像 Protobuf、 ProtoStuff、hession 这类都是跨语言的序列化方式,如果有跨语言需求的话可以考虑使用。转载 2024-03-27 19:42:16 · 175 阅读 · 0 评论