深入理解Java多线程与并发框(第④篇)——重排序、屏障指令、as-if-serial规则
一、重排序前篇文章已经讲了Java内存模型和与其三个特性:原子性、可见性、有序性。但事实上,为了提升程序的执行性能,编译器 和 处理器 常常会对程序指令序列进行 重排序。 重排序分为以下几种: 编译器优化重排序处理器重排序 指令级并行重排序内存系统重排序 二、屏障指令fence 内存屏障(Memory Barrier,或称为内存栅栏,Memory Fence)是一种CPU指令
深入理解Java多线程与并发框(第③篇)——Java内存模型与原子性、可见性、有序性
一、Java内存模型Java Memory Modle,简称 JMM,中文名称 Java内存模型,它是一个抽象的概念,用来描述或者规范访问内存变量的方式。因为各中计算机的操作系统和硬件不同,方式机制也可能不同,Java内存模型用于屏蔽(适配)各种差异,以此来达到访问各个平台的一致的效果。这也是Java夸平台的重要原因之一。 主内存: Java内存规定了所有变量都存储在主内存(Main M
深入理解Java多线程与并发框(第②篇)——线程和进程的区别
线程和进程的区别1. 资源调度单位 在计算机中,进程是程序运行所使用资源的基本单位。比如传统的一个Web应用,运行它需要多少资源,操作系统应该分配多少资源,都是进程为基本单位进行分配资源(资源包括内存、CPU、磁盘、I/O等)。我们知道CPU是一台计算机的运算核心和控制核心,它的功能解释并处理计算机指令,而进程这种量级的资源对于CPU来说实在太大了,无法调度,将进程划分为多个称为线程的实体,
深入理解Java多线程与并发框(第①篇)——线程的状态
1. 新建状态(New) 万事万物都不是凭空出现的,线程也一样,它被创建后的状态称为 新建 状态。 比如: Thread thread = new Thread(); 2. 可运行状态(Runable) 线程被创建后是不能使用的,就是让用户在此期间设置一些属性, 比如: // 设置类加载器 thread.setContextClassLoader(System.
Java常见知识点汇总(完结篇)——这应该是2020年最详细的Java知识点汇总
纸上得来终觉浅,绝知此事要躬行。笔者之前对每部分的内容对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,欢迎读者指正。
Java常见知识点汇总(⑳)——锁
锁的概念可重入锁 如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去
Java常见知识点汇总(⑲)——Java中的强引用、弱引用、软引用、虚引用
强引用:默认情况下,对象采用的均为强引用(这个对象的实例没有其他对象引用,GC时才会被回收)软引用:软引用是Java中提供的一种比较适合于缓存场景的应用(只有在内存不够用的情况下才会被GC)弱引用:在GC时一定会被GC回收虚引用:由于虚引用只是用来得知对象是否被GC 一. 强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。
Java常见知识点汇总(⑱)——Jvm内存结构、Java内存模型、Java对象模型的区别
一. Java内存结构我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。 各个区域的功能不是本文重点,就不在这里详细介绍了。这里简单提几个需要特别注意的点: 以上是Java虚拟机规范,不同的虚拟机实现
Java常见知识点汇总(⑰)——垃圾回收机制(garbage collection-GC)
Java堆中存放着大量的Java对象实例,在垃圾收集器回收内存前,第一件事情就是确定哪些对象是“活着的”,哪些是可以回收的。 Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于
Java常见知识点汇总(⑯)——类加载模型(class loader)
一. 什么是classLoader当我们写好一个Java程序之后,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程
Java常见知识点汇总(⑮)——Jvm架构
一. 什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节
Java常见知识点汇总(⑭)——线程池
线程池的基本思想是一种对象池,在程序启动时就开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。 一. 使用线程池的好处降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就
Java常见知识点汇总(⑬)——线程
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都
Java常见知识点汇总(⑫)——==和equals的区别
== 是一个运算符。 equals则是string对象的方法。 java中 值类型的变量(即基本的诸如int、float等) 是存储在内存中的栈中。 而引用类型(对象)在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。所以字符串的内容相同,引用地址不一定相同,有可能创建了多个对象。 String类是不可变类 String s = “Hello”; //—1 String s1=ne
Java常见知识点汇总(⑪)——泛型
开发人员在使用泛型的时候,很容易根据自己的直觉而犯一些错误。比如一个方法如果接收List作为形式参数,那么如果尝试将一个List的对象作为实际参数传进去,却发现无法通过编译。虽然从直觉上来说,Object是String的父类,这种类型转换应该是合理的。但是实际上这会产生隐含的类型转换问题,因此编译器直接就禁止这样的行为。 一. 类型擦除Java中的泛型基本上都是在编译器这个层次来实现的,在生
Java常见知识点汇总(⑩)——常见设计模式
一. 观察者模式观察者模式用一句话描述就是当一个类的对象(被观察者)的状态发生改变时同时其他依赖于它的对象(观察者)的状态也做相应的改变(做相应的动作)。 具体实现流程: 定义观察者抽象类,该抽象类中有一个被观察者的成员变量,还有一个update方法用于在被观察者发生改变时通知观察者类,实例化观察者类时将被观察者实例传递进来,这样当被观察者调用观察者的update方法后观察者就可以通过
Java常见知识点汇总(⑨)——异常
Java中有Error和Exception,它们都是继承自Throwable类。 二者的不同之处Exception: 可以是可被控制(checked) 或不可控制的(unchecked)。表示一个由程序员导致的错误。应该在应用程序级被处理。 Error: 总是不可控制的(unchecked)。经常用于表示系统错误或低层资源的错误。如何可能的话,应该在系统级被捕捉。 异常的分类
Java常见知识点汇总(⑧)——分派机制
在Java中,符合“编译时可知,运行时不可变”这个要求的方法主要是静态方法和私有方法。这两种方法都不能通过继承或别的方法重写,因此它们适合在类加载时进行解析。 Java虚拟机中有四种方法调用指令: invokestatic:调用静态方法。invokespecial:调用实例构造器方法,私有方法和super。invokeinterface:调用接口方法。invokevirtual:调用以
Java常见知识点汇总(⑦)——集合框架
一. Collection和Collections的区别Collection是集合继承结构中的顶层接口(interface),其是Iterable的子类。 Collections 是提供了对集合进行操作的强大方法的工具类 ,它包含有各种有关集合操作的静态多态方法。此类不能实例化(其构造函数是private的,该类中的方法都是static的可以直接调用) 二. CollectionArray
Java常见知识点汇总(⑥)——Object有哪些公用方法?
protected Object clone() 创建并返回此对象的一个副本。 boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。 protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 Class getClass() 返回此Object的运行时类。 int hash