上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 33 下一页
摘要: 问题的症状 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法 阅读全文
posted @ 2018-11-11 16:18 阿玛尼迪迪 阅读(670) 评论(0) 推荐(0) 编辑
摘要: ArrayList 优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。 缺点:因为地址连续,当要插入和删除时,Arraylist要移动数据,所以插入和删除操作效率比较低。 LinkedList 优点:LinkedLis 阅读全文
posted @ 2018-11-07 15:19 阿玛尼迪迪 阅读(1370) 评论(0) 推荐(0) 编辑
摘要: 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法: 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。 为何Object类需要这样一个方法?它有什么作用呢 阅读全文
posted @ 2018-11-06 17:05 阿玛尼迪迪 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景极其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行 阅读全文
posted @ 2018-11-04 12:34 阿玛尼迪迪 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 在前面一篇文章中提到,对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。下面我们就来讨论以下这个异常出现的原因以及解决方法。 一、ConcurrentModificationExcepti 阅读全文
posted @ 2018-10-31 19:46 阿玛尼迪迪 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列、Synchronizer(比如CountDownLatch)。今天我们就来讨论下同步容器。 一、为什么会出现同步容器? 在Java的集合容器框架中,主要有四大类别:List、Set、Queu 阅读全文
posted @ 2018-10-31 11:44 阿玛尼迪迪 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 一、从数据结构入手 下图为ThreadLocal的内部结构图 从上面的机构图,可以窥见ThreadLocal的核心机制: 每个Thread线程内部都有一个Map; Map里面存储线程本地对象(key)和线程的变量副本(value) 但是,Thread内部的Map是由ThreadLocal维护的,由T 阅读全文
posted @ 2018-10-30 18:09 阿玛尼迪迪 阅读(1579) 评论(0) 推荐(1) 编辑
摘要: volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于v 阅读全文
posted @ 2018-10-29 12:14 阿玛尼迪迪 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有人会问,既然都可以通过synchronized来实现同步访 阅读全文
posted @ 2018-10-26 21:09 阿玛尼迪迪 阅读(233) 评论(0) 推荐(0) 编辑
摘要: JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。 其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。在《Java虚拟机规范(Java SE 8) 阅读全文
posted @ 2018-10-25 12:34 阿玛尼迪迪 阅读(264) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 33 下一页
点击右上角即可分享
微信分享提示