随笔分类 - JVM
摘要:JVM的垃圾回收 垃圾回收一般发生在堆和方法区,也就是线程共享的区域,主要是堆 堆和方法区的内存分配,也是通过垃圾收集器去实现的 垃圾回收,也是通过垃圾收集器实现的 不同的垃圾收集器可能采用不同的垃圾收集算法,去判断对象是否是垃圾对象 垃圾回收判断算法 主要是两种:引用计数法和可达性算法 引用计数法
阅读全文
摘要:JVM方法调用和方法执行 字节码指令集(字典) Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数而构成 比如: 字节 码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将 null
阅读全文
摘要:Java虚拟机栈 虚拟机栈也是线程私有,而且生命周期与线程相同,每个Java方法在执行的时候都会创建一个栈帧 栈内存为线程私有的空间,每个线程都会创建私有的栈内存 栈空间内存设置过大,创建线程数量较多时会出现栈内存溢出StackOverflowError 栈内存也决定方法调用的深度,栈内存过小则会导
阅读全文
摘要:Java堆 Java堆被所有线程共享,在Java虚拟机启动时创建。是虚拟机管理最大的一块内存,也是垃圾回收的主要区域 主要采用分代回收算法,堆进一步划分主要是为了更好的回收内存或更快的分配内存 Java虚拟机规范的描是:所有的对象实例以及数组都要在堆上分配。 不过随着JIT编译器的发展与逃逸分析技术
阅读全文
摘要:运行时数据区初探 运行时数据区概述 我们可以根据是否共享分为线程共享和独有两个分类 线程独享(不需要垃圾回收,随着线程创建而分配,销毁而回收):虚拟机栈、本地方法栈、程序计数器 线程共享(GC 活动区域): 堆、方法区 JVM的运行时数据区的使用顺序 : 线程共享的两块数据区是在JVM启动的时候就按
阅读全文
摘要:类加载详解 类加载的时机 遇到 new 、 get static 、 put static 和 invoke static 这四条指令时,如果对应的类没有初始化,则对应的类要进行初始化 这四个指令对应到我们java代码中的场景分别是 : new关键字实例化对象的时候,比如new Student()
阅读全文
摘要:JVM运行参数以及JIT优化 JVM架构理解 JVM执行流程分析 编译器和解释器的协调工作流程 : 何为热点代码?程序中的代码只有是“热点代码”时,才会编译为本地代码 被多次调用的方法 被多次执行的循环体 目前热点代码的探测方式有两种: 基于采样的热点探测 虚拟机会周期性地检查各个线程的栈顶,如果发
阅读全文
摘要:class文件解析 在我们编译后的class文件内部都是存的16进制的数据 里面到底储存了什么数据,又有什作用呢,下面我们一起来学习学习 Class文件结构示意图 下面的图是一字排开形式,都是平级关系,由于图片排开太长,所以我画成了下面这样【容易误会,特此说明】 Class常量池如何储存数据 看上面
阅读全文