CAS (compare AND swap ) 机制:比较和交换机制,解决分配对象内存的并发问题分配内存的方式:指针碰撞和空闲列表
以前的jvm是采用CAS解决线程并发的问题,但存在不断循环CAS浪费cpu,现在多采用给每个线程分配不同的内存地址,在虚拟机中,默认分配内存会先走第二种,开发者关闭了才走CAS
一个java的对象包含这些东西:
GC回收
判断对象存活的方法中,一般常用的是引用计数算法,就是一个对象有引用时+1,这个比较简单,但是当两个对象相互指向时就麻烦了,因为按理说这两个是没用的对象,应该是垃圾,应该被回收,但是造成了了一个死锁,所以无法被回收,目前的虚拟机中采用的是可达性分析算法
可达性算法的原理:GC中有个数组存储着栈,静态变量,常量池中等数据为根节点,去遍历,假如没有遍历到兑中这个对象就会被回收中一个对象没有任何东西引用他,则视为一个垃圾,应该被回收,例如下面的死锁,他们只是在堆中互相指引着,但是在GC roots中没有东西指引他们两个,所以GC视为垃圾