摘要:
主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则。即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。这里的变量和Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素。但不包括局部变量和方法参数。 Java内存模型规定了所有的变量都存储 阅读全文
摘要:
标记-清除算法 算法分为标记和清除两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 该算法存在的缺点: 1、 效率问题:标记和清除两个过程的效率都不高 2、 空间问题:标记清除之后会产生大量不连续的内存碎片,内存碎片太多可能会倒是以后在程序运行过程中需要分配较大的对象时, 阅读全文
摘要:
垃圾回收器在对对象进行回收前,首先要判断对象是否还“活着”。判断方法有以下两种 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。当引用失效时,计数器值就减1。任何时刻计数器为0的兑现就是不可能再被使用的。 引用计数法的实现简单,判断效率也高,也有一些比较著名的应用案例 阅读全文
摘要:
实现方式 Lock是代码级别的,synchronized是JVM级别的 公平 Lock可以是公平所,也可以是不公平锁,默认是非公平锁,synchronized是非公平锁 释放 Lock的释放必须手动调用unlock()方法,而synchronized在代码出了代码块或方法之后就会自动释放锁。 等待中 阅读全文
摘要:
并发编程的两个关键问题 1、 线程间通信 常见的两种交换信息的机制 A、 共享内存:读写内存中的公共状态来隐式通信 B、 消息传递:无公共状态,通过发送消息来显示进行通信。 2、线程间同步 用以控制不同线程间操作发生的相对顺序的机制 A、 共享内存下的通信机制,这里必须进行显示同步 B、 消息传递的 阅读全文