随笔分类 - Java
摘要:一、背景 《Java虚拟机规范》尝试定义一种Java内存模型(Java Memory Model)来屏蔽各种硬件和操作系统访问内存的差异,在不同平台访问内存方式一致。 二、内存模型 Java内存模型就是定义访问各种变量的规则,也就是说关注Java虚拟机想内存存储变量和从内存读取变量的细节。 1. 主
阅读全文
摘要:一、HashMap HashMap底层是通过数组+链表实现的,KV都可以为NULL,线程不安全; 初始size为16,扩容:newsize = oldsize * 2,size一般为2的n次幂; HashMap扩容针对整个Map,每次扩容后,需要对数组中的元素重新计算位置,再重新插入; HashMa
阅读全文
摘要:一、死锁是什么 在多线程环境下,两条或者多条线程相互持有一些资源,由于竞争资源关系,导致线程堵塞,需要其他线程释放资源才能继续运行。这种情况就是死锁。 比如:ABA问题 二、检测死锁 1. jps 工具 jps(Java virtual machine process status tool)是JD
阅读全文
摘要:一、代理模式是什么? 代理是指为其它对象提供的一种代理,用以对这个对象访问的控制。通俗说就是代替别人去做我们想做的事件。 二、静态代理 抽象类: 1 public abstract class BaseObject { 2 3 protected abstract void operation();
阅读全文
摘要:一、反射机制定义 Java反射机制就是在程序运行状态中,对于任意一个类,都能知道这个类的所有的属性和方法;对于任意一个对象,都能任意的调用对象中属性和方法;这种动态获取类信息以及动态调用对象中任意的属性和方法的功能就是Java的反射机制。 在Java中使用ClassLoader类动态装载Class文
阅读全文
摘要:一、锁优化技术 JDK5之后,在多线程并发上实现了很多锁优化技术,分别是自适应自旋锁、锁消除、锁膨胀、轻量级锁、偏向锁。 二、自适应的自旋锁 自旋锁是其他线程获取持有锁的线程的锁时,让尝试获取锁的线程“忙循环”一会,等待持有锁的线程释放锁。如果,在忙循环结束后,线程依然获取不到锁,线程进入堵塞等待。
阅读全文
摘要:一、简介 synchronized是互斥同步的同步机制,互斥同步又称堵塞同步。synchronized在多线程环境下,其中一条线程获得锁,其他线程需要堵塞等待持有锁的线程释放锁。 synchronized是块结构的同步语法,synchronized需要指定对象参数,对参数的引用就是reference
阅读全文
摘要:一、什么是线程安全的 线程安全就是多线程同时访问一个对象时,需要保证这个对象,在多线程操作下获得的结果是正确的,或者说这个对象在多线程同时访问下,内部状态是正确的。 二、Java中线程安全 Java中多线程操作一个共享对象才会有线程安全问题。 1. 不可变 不可变的对象一定是线程安全的,不管是对象的
阅读全文
摘要:一、面向过程 面向过程是把数据和过程独立分开思考,数据是客体,过程是程序处理数据的过程。 二、面向对象 面向对象是从现实角度出发,将数据和行为作为对象的一部分。 面向对象的特性是:封装、继承、多态。
阅读全文
摘要:一、线程调度 线程调度就是操作系统为线程分配处理器使用权的过程。 二、线程调度方式 1. 协同式(Cooperative threads-scheduling) 协同式是指线程的切换是线程自己控制,也就是说线程执行完成后主动通知切换到另一条线程执行。 协同式调度的好处: 实现简单,线程的切换是线程可
阅读全文
摘要:一、线程是什么 线程是比进程更轻量的调度单位,线程可以共享进程资源(内存地址、文件I/O等),又可以独自调度。 Java中,线程是处理器执行调度的最基本单位。 主流操作系统都提供了线程实现,Java语言提供了不同操作系统平台和不同硬件下对线程的同一处理。 二、线程分类 1. 内核线程 内核线程(Ke
阅读全文
摘要:一、原子性 原子性是指一个操作或者多个操作全部执行并且不会被打断,要么全部不执行。Java内存模型保证read、load、use、assign、store、write六种操作是原子操作,也可以认为Java的基本数据类型也具备原子性(double和float除外,这种除外几乎不会发生,开发中可以不用考
阅读全文
摘要:volatile关键字的作用 volatile关键字是Java虚拟机提供的最轻量级的同步机制,volatile具有可见性和有序性,但是,不具有原子性特性。 Java中提供的操作运算符不具有原子性。 看下面例子: public class Main { public static volatile i
阅读全文
摘要:一、简介 执行引擎是Java虚拟机核心组成部分,Java虚拟机是一个相对物理机的概念。物理机和Java虚拟机都具有执行引擎,物理机的执行引擎是作用在处理器、寄存器、内存和操作系统之上的。而Java虚拟机是由软件实现的,不受物理条件限制。 二、运行时栈帧结构 方法是Java虚拟机最基本的执行单元,栈帧
阅读全文
摘要:深入理解Java虚拟机:JVM高级特性与最佳实践学习笔记 一、强引用、软引用、弱引用、虚引用 二、Java 对象是否GC回收 三、JVM可达性分析算法 四、Java虚拟机之类文件结构 五、Java虚拟机类加载器机制 六、Java虚拟机执行引擎 七、Java 泛型 八、Java volatile关键字
阅读全文
摘要:一、简介 众所周知,Java虚拟机最大的特性就是跨平台,但是,Java虚拟机还有另一个重要的特性,就是语言无关性,Java虚拟机支持其它语言通过编译器编译成.class字节码文件,交付给虚拟机运行。 大家都知道Java语言通过javac编译器将Java编译成.class字节码文件,其它语言也是一样的
阅读全文
摘要:一、可达性分析算法 “GC Roots”根对象集作为起始点集合,从这些节点开始,根据引用关系向下搜索,搜索过程路径称为“引用链”。如果,某对象到GC Root没有引用链相关联,那么,就是GC Root到对象不可达,则证明这个对象不可能再被使用。 上图所示,Object 1与GC Root可达,而Ob
阅读全文
摘要:一、对象何时回收 Java中,使用可达性分析算法标识对象是否回收,即使对象通过可达分析算法被标记为不可达对象,对象不一定被被回收,对象需要经过两次标记才会被回收。在第一次标记后对象会被放入“即将回收”的集合中。对象在随后的判定是否有必要执行finalize()函数后,才会被进行第二次标记,这样,对象
阅读全文
摘要:概述 在Java 1.2版本后,将引用概念进行扩充,分别为:强引用、软引用、弱引用、虚引用,引用强度由强到弱。 一、强引用 在程序中最常用的引用方式,如:Object obj = new Object()这种引用关联,强引用只要引用关系存在,GC在回收时就不会回收引用的对象。 二、软引用 软引用是描
阅读全文
摘要:1. 什么是泛型 泛型指的是定义类、接口、方法的时候不局限于某种特定类型,而是让类、接口、方法的调用者决定使用哪种类型。 泛型的本质是参数泛型化或者参数多态的应用,可以将泛型参数(操作的数据类型)作为方法签名中的一种特殊类型。泛型能够应用在类、接口、方法,就是泛型类、泛型接口、泛型方法。 针对泛型化
阅读全文

浙公网安备 33010602011771号