Loading

上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页
摘要: 分代回收理论 大多数商业虚拟机的垃圾收集器都遵循“分代收集”的理论设计,它建立在两个分带假说至上: **弱分代假说:**绝对大多数对象都是朝生夕灭的。 强分代假说:熬过越多次垃圾收集过程的 对象就越难以消亡。 这两个分代假说表明了垃圾收集器一致设计的原则:应该将Java堆划分为多个不同的区域,然后根 阅读全文
posted @ 2020-08-27 20:02 codeduck 阅读(412) 评论(0) 推荐(1) 编辑
摘要: Class Stack<E> java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.Vector<E> java.util.Stack<E> 实现的所有接口 Serializable 阅读全文
posted @ 2020-08-27 08:50 codeduck 阅读(1801) 评论(0) 推荐(0) 编辑
摘要: 执行引擎是 Java 虚拟机最核心的组成部分之一。「虚拟机」是相对于「物理机」的概念,这两种机器都有代码执行的能力,区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的 阅读全文
posted @ 2020-08-26 21:45 codeduck 阅读(990) 评论(0) 推荐(0) 编辑
摘要: Java的编译期是一个模糊的概念,需要具体分析。 将 *.java文件转为 *.class的过程称为编译器的前端(前端编译)。例如:JDK的javac编译器。 把字节码( *.class文件) 转变为 本地机器码 的过程称为Java虚拟机的即时编译运行期(JIT编译器,Just In Time)。例 阅读全文
posted @ 2020-08-26 21:40 codeduck 阅读(5363) 评论(0) 推荐(3) 编辑
摘要: 深入理解Java虚拟机(类文件结构) 我们所编写的每一行代码,要在机器上运行最终都需要编译成二进制的机器码 CPU 才能识别。但是由于虚拟机的存在,屏蔽了操作系统与 CPU 指令集的差异性,类似于 Java 这种建立在虚拟机之上的编程语言通常会编译成一种中间格式的文件Class文件来进行存储。 一. 阅读全文
posted @ 2020-08-26 21:29 codeduck 阅读(2339) 评论(0) 推荐(0) 编辑
摘要: 目前主流的两款商用Java虚拟机(Hotspot、Open9)里,Java程序最初都是通过解释器(Interpreter)进行解释执行的。在javac编译过后产生的字节码Class文件:源码在编译的过程中,进行「词法分析 → 语法分析 → 生成目标代码」等过程,完成生成字节码文件的工作。然后在后面交 阅读全文
posted @ 2020-08-26 15:33 codeduck 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 1. Java虚拟机栈(Java栈) :deciduous_tree: 虚拟机栈也称为Java栈,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)。 Java虚拟机栈是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)。 栈帧包括局部变量表、操作数栈、动态 阅读全文
posted @ 2020-08-25 13:41 codeduck 阅读(5186) 评论(2) 推荐(0) 编辑
摘要: 🌳 从 Java 虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用 C++ 来实现,是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由 Java 来实现,独立于虚拟机外部,并且全都继承自抽象类 java 阅读全文
posted @ 2020-08-24 21:48 codeduck 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 类的加载过程 Java虚拟机中类加载的全过程包括以下5个阶段:point_down: 上图中加载、验证、准备、初始化和卸载 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的开始注意,这里说的是按部就班的开始,并不要求前一阶段执行完才能进入下一阶段,而解析阶段则不一定:它在某些情况下可 阅读全文
posted @ 2020-08-24 20:41 codeduck 阅读(729) 评论(0) 推荐(1) 编辑
摘要: 1. JVM内存区域划分 jvm在运行java应用程序过程中,会把它所管理的内存划分为若干不同的数据区域。 ☝️ 灰色部分(Java栈,本地方法栈和程序计数器)是线程私有,不存在线程安全问题,橙色部分(方法区和堆)为线程共享区。 2. 类加载器 类加载器(Class Loader)负责加载class 阅读全文
posted @ 2020-08-23 20:47 codeduck 阅读(2440) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页