JVM
写代码的小森森
上若善水
展开
-
8.JVM基础-虚拟机字节码执行引擎(二)
8.3 基于栈的字节码解析执行引擎许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择8.3.1 解析执行不论是解释还是编译,也不论是物理机还是虚拟机,对于应用程序,机器都不可能如人那样阅读、理解 ,然后就获得了执行能力。大部分的程序代码到物理机的目标代码或虚拟机能执行的指令集之前,都需要经过图8-4中的...原创 2019-07-30 11:01:23 · 257 阅读 · 0 评论 -
7.JVM基础-虚拟机类加载机制(一)
7.1 类加载的时机类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(UNloading)7个阶段。其中验证、准备、解析3个部分称为连接(Linking)。加载、验证、准备、初始化和卸...原创 2019-07-16 09:10:45 · 277 阅读 · 0 评论 -
5.JVM基础-对象的创建、内存布局和访问定位
1.对象的创建1. 当虚拟机遇到一条 new 指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用。2. 检查这个符号引用代表的类是否已被加载、解析和初始化。如果没有,则需要先执行相应的类加载过程。3. 虚拟机为新生对象分配内存空间。其中 java 堆分配内存空间的方式主要有两种:指针碰撞(假设 java 堆中内存是绝对完整的):所有用过的内存都放在一边,空...原创 2019-06-28 14:15:25 · 262 阅读 · 0 评论 -
4. JVM基础-垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大的差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。上图展示7种垃圾收集器,如果两个收集器之间存在连线,就说明他们可以搭配使用。虚拟机所处的区域,则表示它是属于...原创 2018-09-25 14:00:41 · 283 阅读 · 0 评论 -
3. JVM基础-垃圾回收和内存分配
谈到垃圾回收(Carbage Collection,简称GC),GC中的垃圾,特指存于内存中、不会再被使用的对象,而回收就是把这么垃圾清除。垃圾回收有很多算法,如引用计数法,标记整理法,复制算法,分代,分区等。3.1 判断对象是否被引用3.1.1 引用计数算法给对象添加一个引用的计数器,每当有一个地方引用它时,计数器值就+1,当引用失效时,计数器-1,任何时刻计数器为0的对象就是...原创 2018-09-20 16:06:55 · 348 阅读 · 0 评论 -
2. JVM基础-虚拟机基本配置参数
在虚拟机运行的过程中,如果可以跟踪系统的运行状态,那么对于问题的鼓掌排查会有一定的帮助。因此,虚拟机提供了一些跟踪系统状态的参数,使用给定的参数执行java虚拟机,就可以在系统运行时打印相关日志,用于分析实际问题。虚拟机参数配置,其实主要围绕着堆、栈、方法区进行配置。2.1 堆分配参数-XX:+PrintGC 使用这个参数,虚拟机启动后,只要遇到GC就会打印日志。 -XX:+...原创 2018-09-19 18:01:03 · 2492 阅读 · 2 评论 -
1. JVM基础-运行时数据区域
1.1 运行时数据区域1.2 程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。1.3 java虚拟机栈与程序计数器一样,java虚拟机也是线程私有的,它的...原创 2018-09-19 13:49:26 · 262 阅读 · 0 评论 -
8.JVM基础-虚拟机字节码执行引擎(一)
8.1 运行时栈帧结构栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的元素。栈帧存储了方法的局部变量表、操作数栈、动态链接和方法返回信息地址等信息。每个方法从调用开始至执行完成的过程,都对应这个一个栈帧在虚拟机从入栈到出栈的过程。一个线程中的方法调用链可能会很长,很多方法都同时处于执行状态。对于执行引擎来说,在活动县城中,...原创 2019-07-30 11:00:18 · 301 阅读 · 0 评论 -
6.JVM基础-类文件结构(一)—— Class类文件结构
Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。JVM 只认识 .class 文件,它不关心是何种语言生成了 .class 文件,只要 .class 文件符合 JVM 的规范就能运行。目前已经有 JRuby、Jython、Scala 等语言能够在 JVM 上运行。它们有各自的语法规则,不过它们的编译器都能将...原创 2019-09-18 10:41:26 · 356 阅读 · 0 评论 -
7.JVM基础-虚拟机类加载机制(二)
7.3 类加载器7.3.1 类与类加载器对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在 java 虚拟机中的唯一性,每一类加载器,都拥有一个类加载器,都拥有一个独立的类名称空间。简单来说,就是“比较两个类是都相等”。只有在这两个类是由同一个加载器加载的提前下才有意义。否则,即使这两个类来源同一个 Class 文件,被同一个虚拟机加载,只要记在它们的类加载器不同,那这两个类...原创 2019-07-22 10:46:58 · 197 阅读 · 0 评论