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
Java常见知识点汇总(⑤)——运算符优先级
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。 基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。先乘除(模),后加减。先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 &am
Java常见知识点汇总(④)——虚函数、抽象函数、抽象类、接口
一. Java虚函数虚函数的存在是为了多态。 它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。 C++中普通成员函数加上virtual关键字就成为虚函数 Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Jav
Java常见知识点汇总(③)——面向对象基础
面向对象三要素:封装、继承、多态 ①. 封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口。 ②. 继承: 继承基类的方法,并做出自己的扩展;声明某个子类兼容于某基类(或者说,接口上完全兼容于基类),外部调用者可无需关注其差别(内部机制会自动把请求派发dispatch到合适的逻辑)。 ③. 多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻
Java常见知识点汇总(②)——Static
static修饰符表示静态的,在类加载时Jvm会把它放到方法区,被本类以及本类的所有实例所共用。在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间。如果一个被所有实例共用的方法被申明为static,那么就可以节省空间,不用每个实例初始化的时候都被分配到内存。 Java类被加载过程: 类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成: ①. 加载(以二进制形式来生成Cl
Java常见知识点汇总(①)——数据类型
一. Java中的数据类型变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。 Java的两大数据类型: 1. 内置数据类型(基本数据类型) ①. 六种数字类型( byte, short, int, long, f