随笔分类 - java中底层问题
1
高性能场景下,HashMap的优化使用建议
摘要:1. HashMap 在JDK 7 与 JDK8 下的差别 顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础。 1.1 获取key的HashCode并二次加工 因为对原Key的hashCode质量没信心,怕会存在大量冲突,HashMap进行了二次加工。 JD
阅读全文
Java中的值传递与引用传递
摘要:1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。 基本类型的变量保存原始值,即它代表的值就是数值本身; 而引用类型的变量保存引用值,”引用值”指向内存空间的地址(存放对象(数据)的首地址),代表了某个对象的引用,而
阅读全文
Java的三种代理模式
摘要:https://blog.csdn.net/goskalrie/article/details/52458773 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象
阅读全文
垃圾收集器(GC)
摘要:堆分区:所有new的对象都会存放在堆中 > 新生代(Young Generation):存放生命周期短的对象,具体还分为Eden和Survivor两个区,其中Survivor分为From Space和To Space; > 旧生代(Old Generation):存放生命周期长的对象 > 持久代(P
阅读全文
线程池的执行原则及配置参数详解
摘要:池是一种非常优秀的设计思想,通过建立池可以有效的利用系统资源,节约系统性能。Java 中的线程池就是一种非常好的实现,从 JDK 1.5 开始 Java 提供了一个线程工厂 Executors 用来生成线程池,通过 Executors 可以方便的生成不同类型的线程池。但是要更好的理解使用线程池,就需
阅读全文
java 创建string对象机制 字符串缓冲池 字符串拼接机制 字符串中intern()方法
摘要:字符串常量池:字符串常量池在方法区中 为了优化空间,为了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池。如果字符串已经存在池中,就返回池中的实例引用。如果字符串不在池中,就会实例化一个字符串并放到池中。Java能够进行这样的优化是
阅读全文
深入剖析Java中的装箱和拆箱(缓存池技术)
摘要:以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 简单一点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。 二.装箱和拆箱是如何实现的 1:反编译class文件:javap -c 类名 2:装箱过程是通过调用包装器(Integer)的valueOf
阅读全文
单例模式
摘要:单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该
阅读全文
【深入理解Java集合框架】红黑树讲解(上)
摘要:作者:CarpenterLee(转载已获得作者许可,如需转载请与原作者联系) 文中所有图片点击之后均可查看大图! 史上最清晰的红黑树讲解(上) 本文github地址 本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及
阅读全文
红黑树( Red-Black Tree ) - 笔记
摘要:1. 红黑树属性:根到叶子的路径中,最长路径不大于最短路径的两倍。 2. 红黑树是一个二叉搜索树,并且有 a. 每个节点除了有左、右、父节点的属性外,还有颜色属性,红色或者黑色。 b. ( 根属性 ) 红黑树的根只能是黑色 c. ( 红色属性 ) 红色节点的子节点只能是黑色 d. ( 黑色属性 )
阅读全文
TreeMap - 源代码学习笔记
摘要:TreeMap 实现了 NavigableMap 接口,而NavigableMap 接口继承于 SortedMap接口。 所有本文还会记录 SortedMap 和 NavigableMap 的阅读笔记。 SortedMap 1. 排序的比较应该和 equals(Object) 保持一致 2. 应该提
阅读全文
Memcached内存管理模型分析
摘要:Memcached 是一个高性能的分布式内存对象缓存系统,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而减轻RDBMS的负担,提高服务的速度、提升可扩展性。本文将基于memcached1.4.15版本源码,对其内存模型进行分析。 首先从业务需求出发。我们通过一条命令(如set)将一条键值对
阅读全文
内存管理和GC算法以及回收策略
摘要:JVM内存组成结构 JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: JVM内存回收 Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对象分为年青代(Young)、年老代(Tenured)、持久代(Perm),对不同生命周期的对象使用不同的算法。
阅读全文
JVM内存模型
摘要:什么是Java虚拟机 此处涉及到两个概念: Java虚拟机,相当于我们定义的Java类 Java虚拟机实例,相当于new一个Java类 注意:Java虚拟机通过java.exe或javaw.exe来启动一个Java虚拟机实例 JVM生命周期 Java虚拟机中存在两种线程: 守护线程,例GC线程 非守
阅读全文
Integer与int的区别(转)
摘要:如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一
阅读全文
大型网站应用之海量数据和高并发解决方案总结一二
摘要:《高性能网站建设进阶指南-Web开发者性能优化最佳实践(口碑网前端团队 翻译)》这本书中,对网站性能的前端界面提供了一些很宝贵的经验,如下: 因此,在这些静态资源的处理上,选择正确的处理方式还是对整体网站性能还是有很大帮助的! (3)数据库优化 数据库优化是整个网站性能优化的最基础的一个环节,因为,
阅读全文
HashMap实现原理分析--面试详谈
摘要:1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表 链表存储区间离散,占用内存比较宽松,故空间复杂度
阅读全文
java有关构造器的面试题详解
摘要:1,编译器只会提供自动提供一个默认的无参数的构造函数 2,如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。 3.子类有多个构造方法时,父类要么没有构造方法,让系统自动提供默认构造方法,那么在执行
阅读全文
JDK1.8源码逐字逐句带你理解LinkedHashMap底层
摘要:注意 我希望看这篇的文章的小伙伴如果没有了解过HashMap那么可以先看看我这篇文章:http://blog.csdn.net/u012403290/article/details/65442646,在这篇文章中我详细介绍了HashMap的底层实现和一些常见的成员变量。只有在对HashMap有一定的
阅读全文
如何查看.java文件的字节码(原码)
摘要:出自于:https://www.cnblogs.com/tomasman/p/6751751.html 直接了解foreach底层有些困难,我们需要从更简单的例子着手.下面上一个简单例子: 1 public class Simple { 2 3 public static void main(Str
阅读全文
1