
JVM
Jvm相关学习
shui2104
这个作者很懒,什么都没留下…
展开
-
虚拟机字节码执行引擎
虚拟机字节码执行引擎 所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。运行时栈帧结构 栈帧用于支持虚拟机方法调用和方法执行的数据结构,它是虚拟机运行时数据区中虚拟机栈的栈元素。 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 一个栈帧需要分配大多的内存,在程序编译的时候就已经确定并写入到方法表的Code属性中了,不原创 2020-06-02 20:02:46 · 185 阅读 · 0 评论 -
Class文件结构
JVM_类文件结构class类文件的结构 Class文件是一组以8为字节为基础单位的二进制流,各数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有添加任何分隔符。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8为字节进行存储。 Class中的两种数据类型:无符号数:属于基本的数据类型,用u1、u2、u4、u8分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字,索引引用、数量值或按照UTF-8编码构成的字符串值。表:多个原创 2020-05-27 16:52:42 · 302 阅读 · 0 评论 -
虚拟机类加载机制
类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载的时机 类从加载到虚拟机内存开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备、解析3部分统称为连接。 虚拟机规范有且只有以下5种情况,必须对类进行"初始化"(相应的加载、验证、准备自然也需要在此之前开始):遇到new、getstatic、putstatic或invo原创 2020-05-27 16:09:07 · 148 阅读 · 0 评论 -
JVM_垃圾收集器与内存分配策略
垃圾收集器和内存分配内存区域中: 方法区和堆存在GC和OOM(OutOfMemoryErro) 本地方法栈和虚拟机栈没有GC过程,但是有SOF(StackOverflow) 程序计数器既没有GC也没有OOM或者SOF垃圾回收的并行和并发并行(Parallel):指多条垃圾收集器并行工作,但用户线程处于等待状态。并发(Concurrent):指用户线程和垃圾收集线程同时执行(不一定并行,可能交替执行),垃圾收集线程执行时不会暂停用户线程。垃圾收集器 上图为JDK1.7之后原创 2020-05-19 18:43:46 · 174 阅读 · 0 评论 -
垃圾收集算法
垃圾收集算法垃圾收集(Garbage Collection,GC)需要思考的3个问题:哪些内存需要回收什么时候回收如何回收了解GC和内存分配的目的:当需要抛出各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,需要自动的垃圾回收和内存分配进行监控和调节。 程序计数器、虚拟机栈和本地方法栈三个区域随着线程而生,随线程而灭;栈中栈帧随着方法的进入和退出进行着出栈和入栈操作。每一个栈帧在类结构确定下来时就确定需要多大的内存空间了。因此这三个区域的内存分配和回收都具备确定性。原创 2020-05-19 18:42:00 · 265 阅读 · 0 评论 -
Java内存区域
Java内存区域运行时数据区程序计数器 指向当前线程所执行的字节码的行号,记录着当前程序运行到了哪。字节码解释器就是通过这个解释器的值来选取下一条需要执行的字节码指令,代码中的分支、循环、跳转、异常处理等基础功能都需要依赖这个计数器。 Java的多线程是通过轮流切换线程来使用处理器处理任务的方式实现的。因此一个处理器在同一时刻只能执行一个线程,为了确保线程在切换的时候能恢复到正确的执行位置,每一个线程都需要一个独立的程序计数器,独立存储,互补影响。正因为如此,这块较小的的内存是"线程私有"的内原创 2020-05-12 00:04:16 · 154 阅读 · 0 评论