
Java虚拟机
文章平均质量分 89
coco猫
这个作者很懒,什么都没留下…
展开
-
笔记JVM —— 线程安全与锁优化
Java 语言中各种操作共享的数据分为:不可变,绝对线程安全,相对线程安全,线程兼容和线程对立 保证对象行为不影响自己状态的途径,最简单的就是把对象中带有状态的变量声明为final 线程安全的实现方法 1.互斥同步 2.非阻塞同步 ...原创 2020-08-09 10:47:36 · 153 阅读 · 0 评论 -
笔记JVM —— 垃圾收集器和内存分配策略
引用计数算法 主流的Java虚拟机里面没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。例如两个对象相互持有对方对象的一个字段的引用。 可达性分析法 通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots 没有任何引用链相连时,则证明此对象是不可用的。 java中,可作...原创 2020-08-02 21:54:10 · 115 阅读 · 0 评论 -
JVM笔记 —— Java内存模型和线程
衡量服务性能的高低,重要指标之一是每秒事务处理数,即一秒内服务端平均能响应的请求总数。 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存取出变量这样的底层细节。此处变量和Java编程中的变量有区别,它包括实例字段,静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,所以不存在竞争问题。 J...原创 2020-08-02 14:43:41 · 130 阅读 · 0 评论 -
笔记JVM —— 虚拟机字节码执行引擎
运行时栈帧结果 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,他是虚拟机运行时数据区中的虚拟机栈的栈元素。 栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址信息等 对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法。 局部变量表 是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量 局部变量表的容量以变量槽位最小单位。 操作数栈 是一个先入先出栈,32位数据类型所占的栈容量为1,64位...原创 2020-07-27 20:59:21 · 123 阅读 · 0 评论 -
JVM —— 虚拟机类加载机制(未完成)
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行效验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括:加载,验证,准备,解析,初始化,使用和卸载,其中验证,准备,解析三个部分统称为连接。解析阶段在某些情况下可以在初始化阶段后开始 初始化的5种情况 遇到new,getstatic,putstatic或invokestatic 这4跳字节码指令时 使用relfect包的方法对类.原创 2020-07-21 21:39:50 · 132 阅读 · 0 评论 -
笔记JVM —— Class 类文件结构
任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(可以通过类加载器直接生成) Class 文件是一组以8位字节为基础单位的二进制流,当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储 Class 文件格式采用一种类似于C语言结构体系的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表。无符...原创 2020-02-24 20:52:38 · 298 阅读 · 0 评论 -
笔记 JVM ——java 内存区域
Java堆 对大多数应用而言,Java堆是Java虚拟机 所管理的内存中最大的一块,Java堆是被所有线程共享的一块区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例或数组,但并不一定是所有对象。 Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”, Java堆中可能划分出很多线程私有的分配缓冲区,目的是为了更好的回收内存,或更快的分配内存。 如果堆中没有内存...原创 2020-02-17 21:49:58 · 143 阅读 · 0 评论