Java
竹秋。
这个作者很懒,什么都没留下…
展开
-
Java笔面试知识点整理:线程池
**为什么要使用线程池?**使用线程池主要有以下一些原因: 降低资源消耗。创建/销毁线程需要消耗系统资源,线程池可以复用已创建的线程。 控制并发的数量。并发数量过多,可能会导致资源消耗过多,从而造成服务器崩溃。(主要原因) 可以对线程做统一管理。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 如果为每一个请求都新开一个线程,会有什么问题? 线程生命周期的开销非原创 2020-08-14 10:23:29 · 158 阅读 · 0 评论 -
JVM笔面试知识点整理:GC、垃圾收集器
程序计数器、虚拟机栈、本地方法栈三个区域为线程私有的,每个栈帧中分配的内存基本在类结构确定时就是已知的,当方法结束或者线程结束时,内存自然就被回收了。垃圾收集主要针对Java堆和方法区进行。 确定需要回收的对象 1. 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器的值就减一;任何时候计数器为零的对象就是不可能再被使用的。 但是单纯的引用计数算法很难解决两个对象之间相互循环引用的问题:当两个对象相互引用,除此之外没有任何其他引用时,实际上这两个对象以及原创 2020-08-10 17:15:49 · 301 阅读 · 0 评论 -
JVM笔面试知识点整理:Java内存区域、类加载
Java内存区域 线程私有的 线程共享的 程序计数器 Java堆 虚拟机栈 方法区 本地方法栈 直接内存 1. 程序计数器 一块较小的内存区域,可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。 另外,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有原创 2020-08-10 11:22:10 · 390 阅读 · 0 评论 -
JDK8新特性:函数式接口和Lambda表达式
函数式接口 Java8最大的变化是引入了函数式思想,也就是说函数可以作为另一个函数的参数。 函数式接口,要求接口中有且仅有一个抽象方法,因此经常使用的Runnable,Callable接口就是典型的函数式接口。可以使用@FunctionalInterface注解,声明一个接口是函数式接口。如果一个接口满足函数式接口的定义,会默认转换成函数式接口。但是,最好是使用@FunctionalInterface注解显式声明。 该注解可用于一个接口的定义上,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且原创 2020-08-04 12:49:53 · 225 阅读 · 0 评论