随笔分类 - Java底层
分享Java底层的相关知识,面试题,代码分享
摘要:一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1,没有就-1,但是没有办法解决循环引用的问题,JVM不采用此类回收法 2.枚举根节点可达性分析(GC
阅读全文
摘要:一.请你谈谈实际的项目中在Java虚拟机会抛出哪些异常,每个异常都是怎么产生的? 1.java.lang.StackOverflowError 栈空间满了 public static void stackOverFlow(){ // 递归调用之后,把栈空间塞满了,当程序出现递归调用没有终止的时候,就
阅读全文
摘要:一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会出现多个对象 运行结果: 在10个线程下,出现了10个对象,显然违背了单例模式 改进 运行结果 二.JAVA如何保证原子性?它的底层是
阅读全文
摘要:一.你在项目中用过CountDownLanuch,CyclicBarrier,Semaphore吗? 1.CountDownLanuch是一个同步的工具类,它允许一个或多个线程一直等待,直到其他线程执行完毕后才会继续往后执行. 通过内部的计数器实现的,计数器的初始化为线程的数量,每当一个线程执行完毕
阅读全文
摘要:一.说说Java创建多线程的方法 1. 通过继承Thread类实现run方法 2. 通过实现Runnable接口 3. 通过实现Callable接口 4. 通过线程池获取 二. 可以写一个Callable的案例吗?如何调用Callable接口 三. 请你谈谈对阻塞队列的理解,为什么要是用阻塞队列,它
阅读全文
摘要:一. 请你谈一谈synchronized和lock有什么区别? 1.synchronized是java的关键字,属于jvm层面,底层是通过moninter对象实现的.Lock是具体的接口,属于api层面. 2.synchronized不需要用户去手动释放锁,当synchronized的代码执行完成后
阅读全文
摘要:请你谈谈对volatile关键字的理解 volatile是Java虚拟机的轻量级的同步机制,具有三个特性: 1.可见性:当一个线程修改了主线程的值,其他的线程可以立即通知其他线程值被修改了 2.原子性:一个线程正在做某个操作时,中途不能被加塞/分割,需要整体执行的完整,要么同时成功,要么同时失败 3
阅读全文
浙公网安备 33010602011771号