java-io
JAVA中获取文件输入流跟内存占用的关系
java程序中获取一个文件的输入流(InputStream ),比如一个50M大小的文本文件的输入流,这个时候程序还没有加载到内存中,只是有一个入口而已,需要循环取其中的内容的时候,才一点一点加载文件的内容.
仅仅是打开输入流,而没有进行读取的话,文件是没有占用内存的,只有读取了文件内容,才会相应的用掉内存,读多少用掉多少。
阻塞/非阻塞、同步/异步
阻塞/非阻塞是描述 线程调用方法的方式
阻塞:线程调用一个方法后,需要等待方法的返回结果时,该线程被挂起,等待方法的返回结果,此时线程状态为wait,释放cpu资源,所以线程后续方法是不会执行的,当方法得到结果时,将线程状态修改为ready/runnable,得到cpu资源并在running状态是,才可以继续执行后续方法.
非阻塞:线程调用一个方法后,不管方法时候返回,直接执行后续方法
同步/异步是描述 方法返回结果的方式
同步:也是线程调用一个方法后,需要等待方法的返回结果,不执行后续方法,但是此时线程还是running状态的,不会释放cpu资源,直到得到方法的返回结果,继续执行后续方法
异步:线程调用一个方法后,直接返回或不返回,此时都是没有方法的执行结果的,并继续执行后续方法,当该方法直接结束后,会通知线程,并返回结果
ps:还是有点懵逼,不太清楚,暂时理解的就是这样,不一定对
再加一个:阻塞时不消耗cpu,非阻塞时销毁cpu
IO、NIO
普通IO是阻塞的,当执行普通IO时线程会被挂起为wait状态,所以需要一个线程去执行一个普通IO,多个普通IO则需要多个线程,否则会影响业务代码执行
NIO是非阻塞的,执行NIO时线程一直处于running状态,所以一个线程可以执行多个NIO
当存在大量IO请求时,普通IO会产生大量线程
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 空山寻痕!