JAVA
文章平均质量分 60
cuijr_leaf
这个人很勤劳,什么都留下了。
展开
-
PriorityBlockingQueue导致的OOM
PriorityBlockingQueue OOM原创 2022-10-18 16:45:15 · 185 阅读 · 1 评论 -
JAVA--HashMap在多线程下的死循环
注:文中图片来自《JDK1.7和JDK1.8中HashMap为什么是线程不安全的?》首先声明一点,在JDK1.7及之前才会发生这种情况。我们现在看下HashMap扩容的源码: void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; if (oldCapacity == MAXIMUM_CAPACITY) {原创 2021-02-09 20:04:19 · 319 阅读 · 0 评论 -
JAVA--foreach与List
e原创 2021-02-09 17:50:28 · 572 阅读 · 1 评论 -
JAVA--foreach与数组
今天发现了个奇怪的问题,直接看代码:package bingfa;import com.sun.javaws.IconUtil;import java.util.concurrent.ForkJoinPool;public class ForeachTest { private class Node{ private int num; private Node(int num) { this.num = num;原创 2021-02-09 17:33:38 · 387 阅读 · 2 评论 -
JAVA--不讲道理的Math.abs()
问题抛出:java.lang包中的Math类是个final类,其中有个方法叫abs()是取绝对值的,但我发现了个有趣的地方.Math.abs(Integer.MIN_VALUE)=-2147483648怎么样?是不是有种颠覆世界观的感觉?解析:首先,我们来看下Integer.MIN_VALUE的二进制:10000000 00000000 00000000 00000000其中首位是符号位,后边31位是数值位.然后,我们来看下Math.abs()的源码:public f原创 2021-02-04 15:11:38 · 811 阅读 · 0 评论 -
JAVA--这才是弱引用的最佳应用场景--ThreadLocal
写在前面:文中涉及到的代码均出自jdk1.8ThreadLocal是什么?ThreadLocal是线程本地变量,通俗点说就是如果一个变量是ThreadLocal类型的,那么每个线程都会创建这个变量的副本,并各自维护.这听起来有些像局部变量,是的,你可以将它理解为作用范围是全局的局部变量.(听起来真绕口,但是我觉的这样说你会懂的)它最经典的应用场景就是数据库的Connection,它可以保证同一个线程的多个方法使用同一个Connection,从而实现跨方法的事务控制.下面来看一个Thr原创 2021-01-29 14:55:31 · 221 阅读 · 0 评论 -
JAVA--关于ThreadLocal中的的几个疑惑
最近在看ThreadLocal的源码,有个问题让我纠结了好久。Thread有个ThreadLocalMap类型的变量叫threadLocals,这个变量存储着本线程所有的ThreadLocal对象。这个ThreadLocalMap类有一个Entry数组叫table。ThreadLocal有个变量叫threadLocalHashCode,它存储ThreadLocal对象的hashcode,它的作用是通过与table数组的长度做与操作,以此获得table数组的下标。这个hashcode与Thread原创 2021-01-29 14:22:41 · 311 阅读 · 2 评论 -
JAVA--HashMap查询的时间复杂度为什么是O(1)
写在前面HashMap查询的时间复杂度是O(1),这是众所周知的,但是你知道为什么是O(1)吗?正文要研究明白这个问题,我们需要从数组开始研究。数组查询的时间复杂度是O(1),为什么呢?因为在内存中,数组对象被创建时,是被分配了一块连续的内存地址,这块连续的内存地址上,存放着大小相等的引用类型,在默认情况下,如果虚拟机内存没有超过32GB,那么JVM使用的是32位的压缩指针,也就是说,在这块连续的内存地址上存放的是一个个的32位的压缩指针。现在假设我们的数组中存了10个对象,那么我们如果要找原创 2021-01-29 11:49:15 · 5749 阅读 · 4 评论 -
JAVA--详细说说Float的二进制存储
基础知识:1. Float类型占4个字节,也就是32bit,其中最高位是符号位,1~9位是指数位,后边的23bit是数值位.如下所示:符号位 指数位 数值位 1bit 8bit 23bit 共32bit 2. 大部分数据的二进制形式都可以用科学计数法表示,即1.m*2^n这种形式,只要知道m和n,就能确定一个数值,float中指数位记载的就是n,数值位记载的就是m.简单示例:我们先来个简单的例子:4.5f是怎么存储的?1. 我们将十进制的4.5转.原创 2020-12-21 20:02:59 · 1275 阅读 · 0 评论