![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
虚拟机&线程
hongzhily
梦想有一天拥有自己的帝国,之后探索宇宙,攻克癌症,发展文化事业
展开
-
垃圾回收算法
判定对象为垃圾对象的方法引用计数法对象每被引用一次,计数器加1,每减少一个引用,计数器减1,当计数器为0,可视为垃圾对象,可以被GC掉可达性分析从虚拟机栈,本地方法栈,方法区出发遍历整个堆区,处于连通区的对象是不可回收的,不处于连通区的是可以GC的对象回收策略标记清除算法分为两个过程,首先标记出可清除的区域,之后进行清除,缺点产生大量内存碎片复制算法将内存分为...原创 2019-08-08 20:44:41 · 112 阅读 · 0 评论 -
虚拟机内存
线程共享区包括堆和方法区堆 存放对象的区域 垃圾收集器工作区域 分为新生代,老年代方法区 常量 静态变量 编译后的代码线程私有区包括虚拟机栈,本地方法栈,程序计数器虚拟机栈 栈帧:一个方法拥有一个栈帧,每调用一个方法,就将栈帧压入栈,方法执行完成出栈。栈帧中存储局部变量表,操作数栈,方法出口等本地方法栈 为native方法服务程序计数器类似于指针,记录jav...原创 2019-08-06 20:04:45 · 159 阅读 · 0 评论 -
Java内存模型
概述java虚拟机分为线程共享区和线程私有区,共享区包括堆,方法区,私有区域包括程序计数器,虚拟机栈,本地方法栈,共享区是所有线程共享,私有区是每个线程独自拥有,java内存模型可以理解成一套规则,这套规则规定了私有区和共享区之间如何进行数据交互,保证数据正确交互八种操作锁定作用于主内存,把主内存的变量标记为某个线程独享读取把主内存中的变量读取出来载入把读取的变量存放到工作...原创 2019-08-06 20:25:15 · 77 阅读 · 0 评论 -
类在虚拟机中的加载流程
加载-》连接(验证-》准备-》解析)-》初始化1)加载:通过类的全名获取类的二进制流,将类的数据结构转化为方法区的结构,在内存中生成一个代表这个类的class对象2)连接:验证:确保class信息正确无害准备:在方法区初始化变量的初始值,对象为nullstatic int a =1 (初始化为0)static final int a = 10 (初始化为10)解析:将类的符号引用转...原创 2019-08-09 18:53:58 · 326 阅读 · 0 评论 -
classloader概览
虚拟机根据类名加载二进制流的过程是由类加载器实现的,也就是classloader,java提供了三种classloaderBootStripClassLoader:加载jre/lib/rt.jarExtensionClassLoader:加载jre/lib/ext/*.jarAppClassLoader:加载CLASS_PATH目录下和应用程序类的加载采用双亲委派机制appcla...原创 2019-08-09 20:09:17 · 138 阅读 · 0 评论 -
class,dex,Dalvik,ART
Class文件基本信息class文件的作用是记住类的所有信息8位字节对齐每个类和接口单独占一个class文件缺点内存占用大堆栈加载方式,加载速度慢文件IO多,类查找慢Dex文件记住整个工程所有类文件信息8字节对齐整个应用所有java文件放在一个dex文件中分为文件头,索引区,数据区Dalvik虚拟机执行文件为dex基于寄存器(JVM基于栈)运行时将字...原创 2019-08-11 13:46:50 · 85 阅读 · 0 评论 -
重排序与volatile
重排序为了提高编译器和处理器的能力,对代码编译执行顺序进行修改// a和b没有依赖关系,编译时可能会是b先执行在执行aint a = 1int b = 2 // 下面由于b依赖于a,所以不会进行重排序int a = 1int b = a + 1volatile当一个线程对共享变量进行修改,其他线程可以立即知道新的共享变量的值,防止重排序每次使用时立即从主内存刷新read,...原创 2019-08-11 14:17:43 · 106 阅读 · 0 评论 -
原子性
原子性原子性是指一个操作不可中断,要么完全成功,要么失败Atomic包,竞争激烈,性能好,但只能维持一个值synchrinized,不可中断,适合竞争不激烈的环境Lock,可中断,竞争激烈Atomic内部包含一个用volatile修饰的变量private volatile int value;实际操作的是unsafe类private static final Unsafe ...原创 2019-08-11 15:08:05 · 112 阅读 · 0 评论 -
AQS和CAS
CASConmpare And Swap,它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。java中的Atomic包内部包含Unsafe类,Unsafe(C++)类内部实现原理就是CASABACAS可以解决并发问题,但是如果1,2连个线程同时操作数据x,1将x修改为y,再次修改成x,此时2对x进行更新此时2线程可以...原创 2019-08-11 16:38:31 · 910 阅读 · 0 评论