Java面试
清风竹雨
JAVA 分布式 大数据
展开
-
十三:Callable、Future和FutureTask之间的关系
文章目录Callable与RunnableFutureFutureTaskCallable与Runnable先说一下java.lang.Runnable吧,它是一个接口,在它里面只声明了一个run()方法:public interface Runnable { public abstract void run();}由于run()方法返回值为void类型,所以在执行完任务之后无...原创 2019-11-29 10:23:38 · 380 阅读 · 1 评论 -
十二:JVM调优及参数配置
JVM 的参数类型标配参数-version-helpX 参数(了解)-Xint:解释执行-Xcomp:第一次使用就编译成本地代码-Xmixed:混合模式XX 参数Boolean 类型:-XX:+ 或者 - 某个属性值(+ 表示开启,- 表示关闭)-XX:+PrintGCDetails:打印 GC 收集细节KV 设置类型:-XX:key=value-X...原创 2019-11-28 15:18:34 · 399 阅读 · 2 评论 -
十一:JVM的内存模型与GC算法
文章目录一、JVM结构1.类加载器(ClassLoader)2.执行引擎3.内存区(也叫运行时数据区)4.本地方法接口二、内存分配三、垃圾检测、回收算法1.标记-清除(Mark-sweep)2.复制(Copying)3.标记-整理(Mark-Compact)4.分代收集算法4.1为什么要运用分代垃圾回收策略?4.2如何划分?一、JVM结构根据《java虚拟机规范》规定,JVM的基本结构一般如下...原创 2019-11-28 15:05:10 · 566 阅读 · 1 评论 -
十:强、软、弱、虚四大引用类型
在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。强引用特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回...原创 2019-11-25 10:48:51 · 214 阅读 · 0 评论 -
九:jvm垃圾的确定与GC ROOT对象
JVM 垃圾回收的时候如何确定垃圾?知道什么是 GC Roots ?什么是垃圾简单来说就是内存中已经不在被使用到的空间就是垃圾要进行垃圾回收,如何判断一个对象是否可以被回收?引用计数法枚举根节点做可达性分析为了解决引用计数法的循环引用问题,Java 使用了可达性算法。跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象...原创 2019-11-22 11:32:12 · 326 阅读 · 0 评论 -
八:死锁编码以及定位分析
死锁编码以及定位分析产生死锁的原因死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。代码案例public class DeadLockDemo { public static void main...原创 2019-11-21 09:42:59 · 262 阅读 · 0 评论 -
七: 深入理解Java之线程池
一、JDK线程池的总体api架构:二、ThreadPoolExecutor类public class ThreadPoolExecutor extends AbstractExecutorService {.......public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,T...原创 2019-11-20 10:50:50 · 481 阅读 · 0 评论 -
六:阻塞队列的理解
1.阻塞队列有哪些强烈推荐参考:https://www.cnblogs.com/bjxq-cs88/p/9759571.html队列有界性锁数据结构ArrayBlockingQueuebounded(有界)加锁arrayListLinkedBlockingQueueoptionally-bounded加锁linkedListPriorityB...原创 2019-11-19 10:32:39 · 355 阅读 · 0 评论 -
五:线程计数器的理解
CountDownLatch让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调用 countDown 方法会将计数减一(调用 countDown 方法的线程不会堵塞),当计数其值变为零时,因调用 await 方法被堵塞的线程会被唤醒,继续执行。假设我们有这么一个场景,教室里有...原创 2019-11-18 11:03:26 · 538 阅读 · 0 评论 -
四:java中的锁分类
java 中锁有哪些1.公平和非公平锁是什么**公平锁:**是指多个线程按照申请的顺序来获取值**非公平锁:**是值多个线程获取值的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,可能会造成优先级翻转或者饥饿现象两者区别**公平锁:**在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一...原创 2019-11-15 09:08:47 · 283 阅读 · 0 评论 -
三:ArrayList的理解
ArrayList 线程不安全的案例和解决方案故障现象public class ContainerDemo { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); Random random = new Random(...原创 2019-11-15 09:05:19 · 291 阅读 · 0 评论 -
二:CAS的理解
CAS 是什么CAS 的全称 Compare-And-Swap,它是一条 CPU 并发操作。它的功能是判断内存某一个位置的值是否为预期,如果是则更改这个值,这个过程就是原子的。CAS 并发原体现在 JAVA 语言中就是 sun.misc.Unsafe 类中的各个方法。调用 UnSafe 类中的 CAS 方法,JVM 会帮我们实现出 CAS 汇编指令。这是一种完全依赖硬件的功能,通...原创 2019-11-08 10:17:16 · 525 阅读 · 0 评论 -
一:Volatile的理解
一、轻量级的同步机制保证可见性禁止指令排序不保证原子性二、基本概念JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规定或则规范,通过这组规范定义了程序中的访问方式。JMM 同步规定线程解锁前,必须把共享变量的值刷新回主内存线程加锁前,必须读取主内存的最新值到自己的工作内存加锁解锁是同一把锁由于 JVM 运行程序的实体是线程,而每个线程创建时 JVM 都会为...原创 2019-11-08 09:49:03 · 304 阅读 · 0 评论