java面试题整理( 二 )
二十.java内存分配?
堆:存储java的实例对象
栈:线程私有 , 存储局部变量表 , 动态链接
方法区:线程共享的 , 存储class二级制文件 。 包含类信息、常量池、静态变量
程序计数器:线程私有的 , 记录着程序运行的位置
本地方法栈:存储java本地方法信息
二十一.GC是什么?
是java的内存回收机制 , 通过算法判断对象是否为垃圾对象来进行回收 。 如果判断对象是垃圾对象呢 , 有两种算法:一种是引用计数法 , 当对象被引用一次时计数加一 。 当引用计数的次数为零的时候就表示对象无用了 。 但是这种算法有一个问题 , 就是当对象循环引用时无法做出正确的判断 。 还有一种算法是可达性分析:把对象看作一棵树 , 看对象是否可达 。
回收过程:1.分为下面四个区:eden、s1、s2、old
2.对象先放入eden中 , 满了就放入s1-》s1满了放入s2 , eden和s1清空-》s2满了将对象放入old中 , 然后s1和s2互换-》old满了进行老年代的回收
二十二.Java 中会存在内存泄漏吗
数据库连接、网络连接
二十三.深拷贝和浅拷贝
深拷贝是拷贝对象的属性 , 如果原对象有引用的属性则修改引用属性不会引起拷贝对象的变化 。
二十四.System.gc和Runtime.gc
功能一样 , 不建议使用 。
二十五.finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?
对象回收前会调用finalize方法、析构函数与构造函数相反 , 就是释放资源 。
二十六.什么是分布式垃圾回收(DGC)?它是如何工作的?
跨虚拟机的远程对象引用 , 引用有租期 。 定时发送租约 。
二十七.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
串行针对小应用、吞吐量针对大数据量
二十八.Minor GC 和 Major GC
minorGC是新生代的gc、Major是老年代的gc
二十九.JVM 的永久代中会发生垃圾回收么?
不会 , 如果满了会直接抛出异常 。
三十.双亲委派机制?
会递归它的父类加载器进行加载 , 好处:放置重复加载、安全 。
三十一.Synchronized 用过吗 , 其原理是什么?
重量解锁 , 可以修饰方法 , 也可以修饰代码块 。 是通过监视器实现的 。 一个监视器的锁只能被一个线程持有 , 这样保证了同一时刻只有一个线程执行这段代码 。 进入监视器时enter、退出时exit、并且监视器有一个计数器 。 这个线程获得了这个锁计数器就加一 , 同一个线程再次获得这个锁时就再加一 。 最后这个计数器为零时表明其他线程可以访问这段代码了 。
三十二.什么是可重入性?
如果当前线程持有了这个锁 , 那么再有这个锁的同步方法或代码块时这个线程可以再次进入 。
三十三.jvm队员是所做了哪些优化?
分为偏向锁(单线程访问的场景 , 加锁解锁速度快)、轻量级锁(多线程执行时的执行速度很快的场景 , 会进行自旋 , 效率更高)、重量级锁
三十四.锁消除和锁粗化?
锁消除:jvm在编译器会对代码进行是否可逃逸分析 , 发现同步的代码不可以不其他线程访问到就会进行锁消除 。
锁粗化:就是看同步块之间没有同步的代码执行的速度是否快 , 如果未同步的代码执行速度很快 。 那么可以将两个同步代码合为一个 , 这样同一个线程减少了申请锁的次数 , 提升了效率 。
三十五.乐观锁、cas?
乐观锁:乐观地认为并发的问题实属罕见 , 通过version来控制并发修改的问题 。 每次修改version都会加一 , 如果当前请求是获取version与最后提交时的version不同表明发生了并发问题 , 会更新失败 。
cas:compare and swap 比较值和预期值作对比 , 如果相同就进行更新 。 但是会出现ABA问题 。
三十六.ReentrantLock原理?
是通过cas和队列实现的 , 先通过cas获取锁的状态-》state为零且队列为空时当前线程得到锁、state不为零时将当前线程放入队列中进行排队-》持有锁线程释放锁 , 判断是否为公平锁 。 如果是公平锁 , 那么队列头的线程获得锁 。 如果是非公平锁 , 那么队列中的线程都有可能获得锁 。
三十七.AQS?
队列同步器
三十八.请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同 。
1.ReentrantLock有公平锁和非公平锁
2.ReentrantLock可以终止等待
3.ReentrantLock可以分组唤醒
4.Synchronized使用起来更便捷 , ReentrantLock功能更多 , 带需要手动释放锁 。
三十九.ReentrantLock 是如何实现可重入性的?
获得锁的线程再次进入同步块的时候state会加一 , 释放锁的时候回减一 。
- 对手|一加9Pro全面曝光,或是小米11最大对手
- 面临|“熟悉的陌生人”不该被边缘化
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- Win10系统桌面|手机桌面秒变Win10电脑系统,这波操作太给力了!
- 覆盖|iPhone13Pro概念机:机身正面被屏幕全覆盖,库克想搞事情?
- 页面|流程图怎样画?老板要我帮他做个组织结构图
- 成本|越拆越亏!旧家电回收面临成本困境:拆解一台旧电视亏损超20元
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人
