java
KevanLiu
诱惑那么多,学会抉择!
展开
-
记一次OOM的分析
前言测试同学反馈测试环境不能正常访问,查看日志发现OOM。虽然是测试环境,但是还是排查了一下原因,以免线上也出同样的问题。处理步骤1、保留现场首先使用jmap -heap pid查看堆空间使用情况,结果发现年轻代和老年代空间都满了还能看到的信息是JVM使用的垃圾收集器是Parallel Scavenge + Serial Old。保留现场:1.使用jmap -histo pid...原创 2020-02-21 17:33:23 · 699 阅读 · 0 评论 -
HashMap中的hash函数
转自:https://www.cnblogs.com/zhengwang/p/8136164.html在写一个HashSet时候有个需求,是判断HashSet中是否已经存在对象,存在则取出,不存在则add添加。HashSet也是通过HashMap实现,只用了HashMap的key,value都存储一个赘余的Object,如下是HashSet中持有的HashMap对象,add函数: ...转载 2019-07-20 11:40:36 · 163 阅读 · 0 评论 -
面试题总结(2019-07-17)
1、LinkedList是单向的还是双向的?双向,因为有previous和next两个方向的指针。那面试官可能会接着问,那是双向链表还是双向重复链表呢?jdk1.6是双向循环链表,head节点首尾相连;jdk1.7是双向链表,去掉了header节点,对应的加了first,last两个节点。为什么jdk要做这样的优化呢?链表在表头表尾做操作情况居多,新的结构只需要在first前或者last...原创 2019-07-18 01:18:02 · 457 阅读 · 0 评论 -
HashMap的tableSizeFor方法解析
前言HashMap的源码有点小复杂,一次性没办法全部弄懂,所以分多次去理解,看懂一点就记录一点,最后再来写个汇总篇,这里先记录其中的tableSizeFor方法。另外jdk版本是1.8.上代码 /** * Returns a power of two size for the given target capacity. */ static final in...原创 2019-07-20 18:14:23 · 396 阅读 · 0 评论 -
HashMap源码注解 之 静态工具方法hash()、tableSizeFor()(四)
https://blog.csdn.net/fan2012huan/article/details/51097331转载 2019-07-20 18:32:19 · 146 阅读 · 0 评论 -
Java 8系列之重新认识HashMap
转自美团技术团队,因为一些图片没显示出来,做了下处理,在链表rehash的代码讲解部分加了点说明,便于理解,原文链接:https://tech.meituan.com/2016/06/24/java-hashmap.htmlHashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMa...转载 2019-07-21 13:58:26 · 130 阅读 · 0 评论 -
Java的快速失败和安全失败
转:http://www.cnblogs.com/ygj0930/p/6543350.html 一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,...转载 2019-07-21 14:38:28 · 147 阅读 · 0 评论 -
为什么匿名内部类参数必须为final类型
转自:https://feiyeguohai.iteye.com/blog/15001081) 从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自然的2) 为什么JAVA中要加上一条限制:只能访问final型的局部变量?3) JAVA语...转载 2019-07-25 15:14:33 · 318 阅读 · 0 评论 -
Java 8 Lambda实现原理分析
转自:https://feiyeguohai.iteye.com/blog/1500108为了支持函数式编程,Java8引入了Lambda表达式,那么在Java8中到底是如何实现Lambda表达式的呢?Lambda表达式经过编译之后,到底会生成什么东西呢?在没有深入分析前,让我们先想一想,Java8中每一个Lambda表达式必须有一个函数式接口与之对应,函数式接口与普通接口的区别,可...转载 2019-07-25 15:17:05 · 298 阅读 · 0 评论 -
java--内部类、静态内部类、成员内部类、局部内部类、匿名内部类
转:https://blog.csdn.net/qq_21918021/article/details/88052728知识总结内部类外部类只能是public或者默认,不可以是protected之类内部类是一个编译是的概念,一旦编译成功,就会成为完全不同的两个类,分别为outer.class和outer$inner.class类。内部类的成员变量/方法名可以和外部类的相同。可以很好...转载 2019-07-25 15:25:58 · 274 阅读 · 0 评论 -
String的intern()方法详解
0.引言什么都先不说,先看下面这个引入的例子:[java]view plaincopyStringstr1=newString("SEU")+newString("Calvin"); System.out.println(str1.intern()==str1); System.out.println(str1=="SEUCalvin");...转载 2019-07-21 23:33:59 · 553 阅读 · 0 评论 -
JVM类加载机制
转:http://blog.csdn.net/ns_code/article/details/17881581类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四...转载 2019-07-18 13:37:58 · 121 阅读 · 0 评论 -
HotSpot中七种垃圾收集器
转:https://crowhawk.github.io/2017/08/15/jvm_3/如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JD...转载 2019-07-18 13:02:01 · 367 阅读 · 0 评论 -
同一个Tomcat下发布多个使用Log4j的项目报错
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener java.lang.IllegalStateException: Web app root system property already原创 2017-03-10 14:45:30 · 1358 阅读 · 0 评论 -
List<Map<String, Object>>保存的是引用数据类型的地址
从list.add(map)理解引用数据类型的概念原创 2016-12-26 18:45:27 · 7236 阅读 · 1 评论 -
Centos安装JDK的两种方式
Centos安装JDK的两种方式Centos安装JDK的两种方式在LInux上安装JDK有两种方式rpm安装压缩包安装 首先说明一下,大部分Linux操作系统安装完成后都会自带OpenJDK, 或者从源中安装的也是OpenJDK,那什么是OpenJDK呢,OpenJDK是JDK的开放原始码版本,以GPL(General Public License)协议的形式放...原创 2017-09-09 13:51:36 · 387 阅读 · 0 评论 -
回调函数学习笔记
回调函数学习笔记 回调函数是一种思想,不限于哪种语言,回调是什么意思呢,举个栗子,主管分配给你一个任务,你完成任务后需要告知主管你完成了任务,最后这个告知的动作就是回调。 回调又分同步回调和异步回调,写过多线程程序的人大概也都知道同步异步是个怎么回事,不清楚的请看我下面的栗子代码,保证让你秒懂,我比较熟悉的是Java语言,下面给出Java版的简要Demo.代码public ...原创 2018-05-17 20:02:37 · 532 阅读 · 0 评论 -
Java8 Stream 分组求和使用笔记
Java8 Stream 分组求和使用笔记话不多说,直接贴代码public static void main(String[] args) { Foo foo1 = new Foo(1, 2); Foo foo2 = new Foo(2, 23); Foo foo3 = new Foo(2, 6); List&amp;lt;Foo...原创 2018-05-11 18:45:13 · 58613 阅读 · 4 评论 -
Java 注解学习笔记
Java 注解学习笔记1. 注解的作用 注解并不直接对程序的语法产生作用,但是会提供一些程序之外的数据或者信息,影响工具或者类库对程序的处理或者调用的方式,从而最终影响程序运行时的行为。2. 注解定义语法 使用@interface进行注解定义,比如:@interface MyAnnotation3. 元注解 元注解是JDK定义的基础注解,共Retenti...原创 2018-05-12 17:58:47 · 316 阅读 · 0 评论 -
JAVA设计模式之代理模式
JAVA设计模式之代理模式1、什么是代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真...原创 2019-03-30 18:30:36 · 179 阅读 · 0 评论 -
线程池ThreadPoolExecutor参数设置
转:https://blog.csdn.net/zhouhl_cn/article/details/7392607JDK1.5中引入了强大的concurrent包,其中最常用的莫过了线程池的实现ThreadPoolExecutor,它给我们带来了极大的方便,但同时,对于该线程池不恰当的设置也可能使其效率并不能达到预期的效果,甚至仅相当于或低于单线程的效率。ThreadPoolExecut...转载 2019-07-18 09:28:43 · 153 阅读 · 0 评论 -
一个一维整形数组,若干个数字,统计数组中不同的数字出现的次数,并按照出现频率从小到大排序输出,相同频率按数字大小排序输出
有更好的方法请留下您宝贵的意见,谢谢啦import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import jav...原创 2015-10-24 20:10:23 · 3848 阅读 · 1 评论