摘要: JMM主要是为了规定线程和内存之间的关系,根据JMM的设计,系统存在一个主内存,Java中所有变量都存储在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存,工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中执行的,线程之间无法相互直接访问,变量传递均需要通过主存完 阅读全文
posted @ 2020-11-02 21:39 走过路过哭过 阅读(190) 评论(0) 推荐(0)
摘要: 1、Serial(串行)收集器:简单高效,单线程收集器,单线程的意义不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在进行垃圾回收时,必须暂停其他所有线程,直到它收集完成 2、ParNew收集器 Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为(控制参 阅读全文
posted @ 2020-11-02 19:10 走过路过哭过 阅读(72) 评论(0) 推荐(0)
摘要: 标记清除算法 标记和清除两个阶段,首先标记出所有要回收的对象,在标记完后同一回收所有被标记的对象 缺点: 1)效率问题:低 2)空间问题:标记清除后会产生大量不连续的问题。空间碎片太多会导致以后再程序运行过程中需要分配大对象时,无法找到足够的连续内存而不得不发出另一次垃圾收集动作 复制算法 将可用内 阅读全文
posted @ 2020-11-02 15:36 走过路过哭过 阅读(59) 评论(0) 推荐(0)
摘要: 强引用 在程序代码中普遍存在,类似”Object obj=new Object()",只要强引用还在,垃圾收集器就永远不会回收掉被引用的对象,即使内存不足,抛出OutOfMemorryError错误 软引用 当一个对象具有软引用,类似于一个可有可无的生活用品。如果内存空间充足,垃圾回收器就不会回收它 阅读全文
posted @ 2020-11-02 14:58 走过路过哭过 阅读(63) 评论(0) 推荐(0)
摘要: 1、如何在Java中判断对象已经死亡? 引用计数法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1;任何时刻计数器值为0的对象就是不可能被使用的 反例:对象之间相互循环使用 指两个对象相互引用着对方之外,无任何其他引用。因为它们互相引用对方,导致计数器 阅读全文
posted @ 2020-11-02 14:31 走过路过哭过 阅读(66) 评论(0) 推荐(0)
摘要: 1、Lock是一个接口,而synchronized是一个Java关键字,synchronized是内置的语言实现,Lock是代码层面的实现 2、Lock可以选择性的获取锁,如果一段时间获取不到,咋可以不要了。synchronized不行,不达目的不罢休。借助这个特性,Lock可以避免死锁,而sync 阅读全文
posted @ 2020-11-02 10:58 走过路过哭过 阅读(142) 评论(0) 推荐(0)
摘要: 1、抽象类和接口有什么异同 抽象类和接口都不能被实例化,但可以定义抽象类和接口的引用 一个类如果继承了某个抽象类或者实现了某个接口,则都需要对其中的抽象方法全部进行实现,否则该类任然需要被声明为抽象类 接口比抽象类更加抽象,抽象类中可以定义构造器,可以有很多抽象方法和具体方法,但是接口不能定义构造器 阅读全文
posted @ 2020-11-02 10:54 走过路过哭过 阅读(68) 评论(0) 推荐(0)
摘要: 1、构造器是否可以被重写? 不可以,构造器不能被继承,所以不能被重写,但是可以被重载 2、HashCode的作用与equal有什么区别 都是鉴定两个对象是否相等 如果用euqal去比较,若存在10000个元素,那么你插入一个元素你就要调用10000次equal去比较是否是同一个对象,大大降低了效率。 阅读全文
posted @ 2020-11-02 10:15 走过路过哭过 阅读(96) 评论(0) 推荐(0)
摘要: 1、wait()和sleep()的区别 sleep属于Thread类,wait属于object类 调用wait方法,线程会释放锁对象,sleep不会 sleep睡眠后不会让出系统资源,wait让出系统资源,其他线程可以占用CPU 2、Object有哪些公用方法? equals测试两个对象是否相等 方 阅读全文
posted @ 2020-11-02 10:00 走过路过哭过 阅读(56) 评论(0) 推荐(0)