0%

为什么要使用线程池

Java线程的创建非常昂贵,需要JVM和OS(操作系统)配合完成大量的工作:

(1)必须为线程堆栈分配和初始化大量内存块,其中包含至少1MB的栈内存。

(2)需要进行系统调用,以便在OS(操作系统)中创建和注册本地线程。

阅读全文 »

双亲委派机制是什么

概念

双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式

阅读全文 »

什么是字节码以及它的组成

字节码概念

Java 字节码(英语:Java bytecode)是Java虚拟机执行的一种指令格式

大多数操作码都是一个字节长,而有些操作需要参数,导致了有一些多字节的操作码。

因为JVM针对各种操作系统和平台都进行了定制,无论在什么平台,都可以通过javac命令将一个.java文件编译成固定格式的字节码(.class文件)供JVM使用。之所以被称为字节码,是因为.class文件是由十六进制值组成的,JVM以两个十六进制值为一组,就是以字节为单位进行读取

格式如下

bytecode

字节码的组成

阅读全文 »

什么是守护线程

在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)

任何一个守护线程都是整个JVM中所有非守护线程的保姆:

只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。

User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了。

注意事项:

阅读全文 »

如何预防死锁

首先举个例子说明什么是死锁,比如,一个十字路口,东西南北四个方向分别有四列车ABCD,A在东向被D堵着,D北被B堵着,B在西被C堵着,C在南被A堵着,这就造成了十字路口的堵死,也就是所谓的死锁。

具体图示如下:

deadlock

那么如何预防死锁?

阅读全文 »