java
Z4c要加油
这个作者很懒,什么都没留下…
展开
-
[Leecode]215. 数组中的第K个最大元素 JAVA解法三种方法
1.题目 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素, 而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 ...原创 2020-06-30 22:59:27 · 4785 阅读 · 0 评论 -
深入理解JVM-垃圾收集器的选择
1.概述 JAVA中不同于C++的地方在于,JAVA程序员只需关心创建对象,回收对象由垃圾回收器负责。而C/C++程序员既需要负责创建也要负责回收。 之前的文章我们了解了JVM的内存区域,知道了我们创建的对象几乎都在堆中。所以垃圾收集器主要是作用在堆的。我们知道堆可以细分为新生代和老年代。有些垃圾收集器(Sirial,ParNew,Parallel Scavenge)作用在新生代,有些垃圾收集器(CMS,Serial,Paraller Old)作用在老年代,还有一种特殊的、同时作用在新生代和老年代的垃圾收集原创 2020-06-13 00:35:06 · 232 阅读 · 0 评论 -
HashMap负载因子为什么是0.75,链表转红黑树阈值为什么是8
1.HashMap负载因子为什么是0.75 这是时间与空间成本上的折中。 1.1时间成本 假设负载因子是1时,虽然空间利用率高了,但是随之提高的是哈希碰撞的概率。 而Hashmap中哈希碰撞的解决方法采用的拉链法,哈希冲突高了会导致链表越来越长(虽然后面会转换成红黑树),我们知道链表的查询效率是比较低的,所以负载因子太高会导致时间成本上升。 1.2空间成本 那么为了减少哈希冲突,提高查询效率,负载因子是不是越低越好呢?答案显然是否定的。 ...原创 2020-06-11 23:54:06 · 2114 阅读 · 1 评论 -
《深入理解Java虚拟机》学习笔记-对象内存布局
1.概述 前面我们了解到Java中几乎所有的对象都存放在堆中,但我们并不知道对象是如何具体储存在堆中,接下来我们开始分析对象在堆内存中的储存布局是怎样的。 2.内存布局 对象在堆内存中的储存布局可以划分为三个部分 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 2.1对象头 对象头部分包括两类信息。 第一类是用于储存对象自身的运行时数据,例如HashCode、GC分带年龄、所状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分官方称它为"Mark Wor原创 2020-06-04 17:44:25 · 196 阅读 · 1 评论 -
《深入理解Java虚拟机》学习笔记-Java内存区域
首先讲个笑话:饭堂里吃完饭把餐桌收拾好的是C++程序员,吃饭完拍拍屁股走人的是JAVA程序员。 1.概述 在内存管理区域,C++程序员必须对每一个对象生命从开始到终结的维护负责。而JAVA程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要对每一个new操作去写配对的delete/free代码,不容易(不代表不会)出现内存泄漏和内存溢出问题。一旦出现内存泄漏和内存溢出的问题,如果不了解虚拟机是怎么样使用内存的,那排查错误将会异常艰难。 2.运行时数据区域 分为五个区域,它们又分为线程共享和线程私有 线程共原创 2020-06-01 15:54:12 · 189 阅读 · 0 评论 -
ThreadLocal中使用弱引用的原因解析
当我们创建一个threadlocal时 //此时local对创建的对象是强引用 ThreadLocal<String> local=new ThreadLocal<>(); //以一个键值对的形式<local,"123">//线程的成员属性存入map local.set("123"); 此时创建的对象ThreadLocal被两个地方引用 1.local的引用 2.键值对的引用 此时我们需要明确知道threadlocalMap是线程的成员属性(以下简称为Map) Map原创 2020-05-29 15:35:32 · 3112 阅读 · 2 评论