Java虚拟机(三)虚拟机中的内存溢出 2020-01-04| Java虚拟机 OutOfMemoryError异常OutOfMemoryError异常(简称OOM)是Java虚拟机中一个比较常见的异常,它的情况有很多种,我们就以HotSpot的虚拟机为例,讲解一下常见的异常。
Java堆溢出Java堆是在虚拟机中,所有线程共享的一个堆栈,我们如果在程序中不断地添加一个对象而不 ...
阅读更多 Java虚拟机(二)HotSpot虚拟机对象探秘 2020-01-04| Java虚拟机 对象的创建在Java中,一个对象的创建,一般是使用new指令去完成。而c++则是直接定义对象就行了,Java虚拟机在对对象的创建和使用中有着自己的分配机制。我们的虚拟机遇到 new 指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析 ...
阅读更多 Java虚拟机(一)Java虚拟机概念 2020-01-03| Java虚拟机 Java的起源但是要说清楚Java虚拟机,我想从JDK开始说起。我们想要在一个计算机上使用Java,就必须在网上下载JDK和JRE,JDK是Java的开发工具,JRE是Java的运行环境,有了这个两个就能在计算机上使用Java。有人说可能还需要配置path路径,其实也未必,之所以要配置Java_ho ...
阅读更多 Java并发编程(二十一)AIO 2020-01-02| 并发编程 - 网络 AIO在网络编程的一步一步进化中,NIO取代了旧的IO方式。而如今,NIO这样的通过selector不断去监控channel的方式,已经开始不满足于现如今的优化需要,也因为NIO一直都是一个同步的IO队列,对于高并发情况下,产生的阻塞依然会让人苦恼,于是乎,像AIO这样的异步IO方式,便诞生了。
...
阅读更多 Java并发编程(二十)网络NIO 2020-01-01| 并发编程 - 网络 NIO什么是NIONIO,即new io,一个可以代替Java io的一个新的机制。这个机制极大的区别的传统的io,让程序在多线程上拥有更好的效率。我们先来看看它和传统的io有什么区别。
它在类型上和io不同,nio主要是一个面向缓冲区操作的,我们传统的io,都是使用着stream流的方式去读写信 ...
阅读更多 Java并发编程(十九)并行算法 2019-12-31| 并发编程 - 算法 串行计算在并行的情况在串行条件下,许多计算方法,都比较的贴近自然语言,就好似a=b+c; 这样的计算方法,无疑那么的明显,就是a要等于b和c的和,和我们使用手写写出来的,并没与什么区别。但是,这样的计算方法,在并行条件下,却有那么点不同。或者说,串行计算在并行条件(多线程)下,也只会执行串行计算。举 ...
阅读更多 Java并发编程(十八)Future模式 2019-12-31| 并发编程 - 设计模式 - 线程池 Future模式Future模式是在多线程程序中设计中的一个非常常见的设计模式,它和Runnable非常类似,总整体而言,可以看作为有了返回值的Runnable。但是Future模式是继承Callable接口,重写call()方法的:
12345678import java.util.concurr ...
阅读更多 Java并发编程(十七)常见的设计模式 2019-12-30| 并发编程 - 设计模式 单例模式单例模式,也就是所谓的工厂模式,单例模式是在设计模式中非常常见的模式,也是应用最为普遍的模式之一。它的特点是:确保系统中的类只产生一个实例。运用这种模式带来的最直观的好处是,减小开销,提高效率。这种模式省略了大量的new操作,对于要大量的使用某些重量级对象的程序而言,有着极大的优化。
123 ...
阅读更多 Java并发编程(十六)死锁状态 2019-12-30| 并发编程 死锁在实际应用上,使用锁的环境远远要多于使用无锁。但是经常使用锁,一般都会面对一个问题,那就是死锁,现在用一个例子,简单的阐述死锁。
哲学家的餐桌哲学家就餐问题就是一个常见的死锁问题。有四个哲学家坐在一个正方形的桌子上面,每个桌角都放置有一个叉子,而哲学家必须使用两个叉子才能正常进餐,但是哲学家们并 ...
阅读更多 Java并发编程(十五)线程互助的SynchronousQueue 2019-12-29| 并发编程 让线程之间互相帮助:SynchronousQueue在线程池的介绍当中,提到一个非常特殊的队列,叫做SynchronousQueue。它的容量为0,对任何一个写操作,都要等待一个读操作,可以把SynchronousQueue看做为一个数据的交换通道。讲到这样一个需要等待操作的方法,不得不提到之前的L ...
阅读更多