摘要: 第一次写博客,先练练手。 1.AQS是什么? 在Lock中,用到了一个同步队列AQS,全称为AbstractQueuedSynchronizer,它是一个同步工具也是lock用来实现线程同步的核心组件 2.AQS的两种功能 从使用层面来说,AQS的功能分为两种:独占和共享 独占锁,每次只能有一个线程 阅读全文
posted @ 2020-07-28 10:48 后羿飞箭 阅读(139) 评论(1) 推荐(0) 编辑
摘要: 1.对象分配原则 1)对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC 2)大对象直接进入老年代(大对象是指需要大量连续内存空间的对象),这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存) 3)长期存活的 阅读全文
posted @ 2020-08-05 12:19 后羿飞箭 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 重新认识JVM GC 优化 内存被使用之后,难免会有不够用的或者达到设置值的时候,就需要对内存空间进行垃圾回收 垃圾收集发生的时机 GC是由JVM自动完成的,根据JVM系统环境而定,所以时机是不确定的,当然了,我们可以手动进行垃圾回收,比如调用System.gc() 方法通知JVM进行一次垃圾回收, 阅读全文
posted @ 2020-08-04 13:46 后羿飞箭 阅读(132) 评论(0) 推荐(0) 编辑
摘要: Garbage Collect(垃圾回收) 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾 1.引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针对其引用,它就是垃圾。 弊端:如果AB相互引用,导致永远不能被回收 2. 阅读全文
posted @ 2020-08-04 12:20 后羿飞箭 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 结合字节码指令理解Java虚拟机栈和栈帧 栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间 每个栈帧中包括局部变量表(Local Variables),操作数栈(Operand Stack) 执行运行时常量池的引用(A reference to the run-time consta 阅读全文
posted @ 2020-08-04 10:40 后羿飞箭 阅读(141) 评论(0) 推荐(1) 编辑
摘要: 官网 https://docs.oracle.com/javase/8/ The relation of JDK/JRE/JVM 源码到类文件 class Person{ private String name; private int age; private static String addr 阅读全文
posted @ 2020-08-04 09:50 后羿飞箭 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 1.什么是线程池 在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系 统资源不足为了解决这个问题,就有了线 阅读全文
posted @ 2020-07-31 16:26 后羿飞箭 阅读(138) 评论(0) 推荐(0) 编辑
摘要: J.U.C 中的阻塞队列 阻塞队列的操作方法 在阻塞队列中,提供了四种处理方式 1. 插入操作 add(e) :添加元素到队列中,如果队列满了,继续插入元素会报错,IllegalStateException。 offer(e) : 添加元素到队列,同时会返回元素是否插入成功的状态,如果成功则返回 t 阅读全文
posted @ 2020-07-31 12:35 后羿飞箭 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 前言 HashMap是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构,同时也是我们需要掌握的数据结构,更重要的是进大厂面试必问之一。 数组特点 存储区间是连续,且占用内存严重,空间复杂也很大,时间复杂为O(1)。 优点:是随机读取效率很高,原因数组是连续(随机访问性强,查找速度快 阅读全文
posted @ 2020-07-29 09:25 后羿飞箭 阅读(129) 评论(0) 推荐(0) 编辑