首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java虚拟机原理(一)

Java虚拟机内存模型 Java虚拟机模型是Java程序运行的基础。为了能使程序正常运行,JVM将内存数据分为程序计数器、虚拟机栈、本地方法栈、Java堆和方法区等部分,如下图所示。 ?...2.Java虚拟机Java虚拟机栈用于存放Java函数调用的堆栈信息,它也是线程私有的内存空间。...Java虚拟机栈和Java线程同时创建,保存方法的局部变量和部分结果,并参与方法的调用和返回。 JVM规范允许Java栈的大小是动态的或者固定的。...3.本地方法栈 本地方法栈和Java虚拟机栈的功能相似,Java虚拟机栈用于管理Java函数的调用,而本地方法栈用于管理native方法的调用。本地方法栈不是采用Java实现的,而是用C实现的。...总结 Java虚拟机将内存数据主要分为五个部分,包括:程序计数器、虚拟机栈、本地方法栈、Java堆和方法区。

18520
您找到你想要的搜索结果了吗?
是的
没有找到

java虚拟机构造原理

Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。...这些组件构成了Java虚拟机的内部结构,他们不仅仅为Java虚拟机的实现提供了清晰的内部结构,更是严格规定了Java虚拟机实现的外部行为。...Java虚拟机将 这些信息统统保存在数据区(data areas)中。虽然每个Java虚拟机的实现中都包含数据区,但是Java虚拟机规范对数据区的规定却非常的抽象。...Java虚拟机不使用寄存器保存计算的中间结果,而是用Java堆栈在存放中间结果。这是的Java虚拟机的指令更紧凑,也更容易在一个没有寄存器的设备上实现Java虚拟机。...JVM内存回收 Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对象分为年青代(Young)、年老代(Tenured)、持久代(Perm),对不同生命周期的对象使用不同的算法

56960

Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

文章目录 一、JDK 体系结构 二、Java 源码运行原理 三、Java 虚拟机内存结构 一、JDK 体系结构 ---- JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java..." Java Virtual Machine " , 这是 Java 代码一次编译 , 到处运行的基础 , Java 程序实际上是运行在虚拟机上的 ; 二、Java 源码运行原理 ---- Java...源码运行原理 : 编写一个 HelloWorld.java , public class HelloWorld{ public static void main(String[] args)...字节码文件 , 使用 java 命令执行上述字节码文件 , 将字节码文件装载到 Java 虚拟机 中 , java HelloWorld Java 虚拟机是使用 软件 模拟 完整硬件系统功能 ,...Linux 操作系统 , Java 虚拟机会将字节码文件转为 Linux 机器码 , 在 Linux 系统中运行 ; 在不同的操作系统中 , Java 虚拟机的底层实现是不同的 ; 三、Java 虚拟机内存结构

71820

Java 虚拟机原理Java 反射原理 ( 反射作用 | 反射用法 )

文章目录 一、Java 反射原理 二、反射作用 三、反射用法 一、Java 反射原理 ---- Java 反射原理 : Java 类源码 被 javac 工具 编译成 Class 字节码文件 后 , 加载到...Java 虚拟机 内存中 , Class 字节码数据 会被加载到 运行内存中的 方法区 , 该区域又称为 元空间 ; 参考下图回顾下 JVM 方法区存储内容 : 静态变量 , 常量 , Class 字节码数据..., 永久代对象数据 ; 上图来自博客 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 ) 一、Java 虚拟机内存分区...章节 ; 确定了 Java 虚拟机 在 内存空间 的 方法区 保存 Class 字节码 , 下面讨论 Class 字节码的保存形式 ; 在 方法区 中 , 保存了 字节码信息 , 以 Class 对象形式保存...; Java 反射 就是通过拿到 方法区 中的 Class 对象 , 通过该对象获取并访问 Java 类中的 类 , 字段 , 方法 ; JVM 内存 的 方法区 存放 Student.class 字节码数据

62010

Java虚拟机工作原理详解

从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。...--Bootstrap class loader: 当运行java虚拟机时,这个类加载器被创建,它加载一些基本的java API,包括Object这个类。...对于某个特定的类加载器来说,一个Java类只能被载入一次,也就是说在Java虚拟机中,类的完整标识是(classLoader,package,className)。一个雷可以被不同的类加载器加载。.../jre/lib/ext)是找,还是没找到,继续往下,此时System加载器到classpath路径寻找,找到了,于是加载到Java虚拟机。...框图中各个步骤简单介绍如下: Loading:文章前面介绍的类加载,将文件系统中的Class文件载入到JVM内存(运行数据区域) Verifying:检查载入的类文件是否符合Java规范和虚拟机规范

44410

Java 虚拟机原理】堆区 | Java VisualVM 工具

文章目录 一、Java VisualVM 工具 二、堆区 一、Java VisualVM 工具 ---- Java 中提供了一个监控当前设备 Java 程序的工具 Java VisualVM ; 在命令行中执行...jvisualvm 命令 , 可以打开该工具 ; 可以通过该程序监控 JVM 以及 Java 程序的运行参数 ; 二、堆区 ---- 堆区的对象分步如下图 : 堆区的对象 分为 年轻代 ,...To 两部分 , 各占 10\% ; 新创建的对象 , 放到 堆区 中 , 会先放到 Eden 区 ; 假设当前堆区内存是 300 MB , 老年代 200 MB , 年轻代 100 MB ; Java...虚拟机启动后 , 一直再运行 , Eden 区 早晚会满 ; 如果 Eden 存放满了 , 就会进行 minor GC 操作 , 如果对象被判定为可以回收 , 就会将对象放到 Survivor 区 的

23710

Java虚拟机编译原理一:初识JVM

Java虚拟机部分属于Java的高级编程知识,所以学习这一部分内容需要读者有一定的编程基础。 作为系列的第一篇,我们先简单认识一下JVM,什么是JVM?JVM是做什么的?JVM的作用是什么?...1 虚拟机与计算机的关系 在计算机的硬件系统中,机器码是唯一能够被识别并执行的计算机语言。...而这个"托管环境"就是"虚拟机--VM",于是引出本篇的主角:Java虚拟机--JVM。 ?...但对于Java程序来说,我们通常不需要手动去清理空间,这项"福利"就源自JVM提供的自动垃圾回收机制。...内存分类管理 就像我们使用计算机需要用不同文件夹来分类存放文件,JVM为我们提供了自动的内存分类管理,用以优化java程序的内存使用。

35530

粗谈Java虚拟机原理与结构

前言 ---- 1. class文件与dex文件解析 在学习java虚拟机之前,我们有必要先来了解下下class文件与dex文件。...是一种能被Java虚拟机识别的文件格式,所以在了解虚拟机之前有必要先了解下class文件。Java程序的执行依赖于编译环境和运行环境,下面我们用一张图来了解下流程的完成。 ?...其实Java虚拟机有两种类装载器:系统装载器(前两个)和用户自定义装载器(后两个)。前者是Java虚拟机实现的一部分,后者则是Java程序的一部分。 ?...对于某个特定的类加载器来说,一个Java类只能被载入一次,也就是说在Java虚拟机中,类的完整标识是(classLoader,package,className)。一个类可以被不同的类加载器加载。...image ---- 优秀文章推荐(本文部分参考) Java虚拟机工作原理 理解Java虚拟机体系结构 Java虚拟机工作原理详解 书籍:《深入理解java虚拟机》(有需要PDF请留言,

36910

Java 虚拟机原理】Dalvik 虚拟机 ( 简介 | CPU 指令集 | Dalvik 虚拟机内存 )

文章目录 一、Dalvik 虚拟机简介 二、CPU 指令集 三、Dalvik 虚拟机内存 一、Dalvik 虚拟机简介 ---- Android 5.0 之前使用的是 Dalvik 虚拟机 , 5.0...之后使用的是 ART 虚拟机 ; Dalvik 虚拟机 也是 Java 虚拟机的一种 , 但是其没有获得 Sun 的测试审核 , 经过 Sun 公司测试 , 审核 , 授权后 , 虚拟机才能叫做 Java...虚拟机 , 只是名字上有区别 , 但是其还是符合 JVM 规范的 ; 同理 , 手机厂商必须经过 Google 测试审核之后 , 才能叫 Android 手机 ; Dalvik 虚拟机 的 内存结构...PC 端使用 , 运行在 x86 架构 CPU 上 ; DVM 主要是在手机端使用 , 运行在 arm 架构 CPU 上 , DVM 的内存优化比较高 ; 二、CPU 指令集 ---- 不同架构上的 Java...虚拟机 实现也是不同的 ; CPU 架构参考 【C 语言】CPU 架构 ( CPU 指令集类型 | CPU 指令类型 | CPU 架构 ) RISC : Reduced Instruction Set

1.1K10

【说站】java虚拟机中栈的运行原理

java虚拟机中栈的运行原理 运行原理 1、不同线程中所包含的栈帧是不允许存在相互引用的。...2、如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给当前一个栈针,并且虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧。 3、Java方法有两种返回函数的方式。...        double j = 3.1;         System.out.println("method3()即将结束");         return j;     } } 以上就是java...虚拟机中栈的运行原理,希望对大家有所帮助。...更多Java学习指路:Java基础 本教程操作环境:windows7系统、java10版,DELL G3电脑。 收藏 | 0点赞 | 0打赏

21720

Java虚拟机--Java发展史Java虚拟机

Java虚拟机 从今开始,笔者开始向大家讲解JAVA虚拟机的知识,有没有很兴奋!!!! 对于JAVA开发者来说,虚拟机再熟悉不过,每天的工作中都会接触,但是总有一种“近在眼前,却又远在天边”的感觉。...既然学习虚拟机,那么关于Java的相关历史还是有必要去了解的,在本章节中,笔者将会先介绍Java的发展历史,再说说Java虚拟机的发展历史! 接下里,就让我们开始第一章节的学习吧。...在JDK1.0版本中,主要技术包括:Java虚拟机、AWT等。...在Java1.2这个版本中,Java虚拟机第一次内置了JIT(Just In Time)编译器,之前版本的Sun Classic VM虚拟机只能以外挂的形式使用JIT编译器。...在这个版本中,Java虚拟机做了大量改进,包括锁与同步、垃圾收集、类加载等。

1.4K70

Java虚拟机--虚拟机内存区域Java虚拟机内存区域

Java虚拟机内存区域 Java程序在JVM虚拟机中运行,当我们一个类被加载到虚拟机中时,JVM会给该类分配具体的内存空间/内存地址,而这被分配的区域就是Java虚拟机运行时内存区域。...虚拟机开始启动,Java虚拟机通过类加载器加载xxx.class字节码文件,加载完毕之后(加载过程后续会讲到),再交由Java虚拟机的执行引擎进行实际的运行。...根据《Java虚拟机规范(Java SE 7版本)》的规定,Java虚拟机所管理的内存包括如下几个Java运行时候数据区域: ?...在《Java虚拟机规范(Java SE 7版本)》中,Java虚拟机栈可以被设计成固定大小或者随着程序的执行动态扩展和收缩的形态。...Java虚拟机堆 在Java虚拟机中,Java虚拟机堆是各个线程中共享的内存区域,也是我们Java程序中新建的对象数数组锁分配内存的区域。

2K80

Java虚拟机

scope=mdnice] 简述JVM内存模型 线程私有的运行时数据区: 程序计数器、Java 虚拟机栈、本地方法栈。 线程共享的运行时数据区:Java 堆、方法区。...简述虚拟机Java 虚拟机栈用来描述 Java 方法执行的内存模型。线程创建时就会分配一个栈空间,线程结束后栈空间被回收。...简述本地方法栈 本地方法栈与虚拟机栈作用相似,不同的是虚拟机栈为虚拟机执行 Java 方法服务,本地方法栈为本地方法服务。...可以将虚拟机栈看作普通的java函数对应的内存模型,本地方法栈看作由native关键词修饰的函数对应的内存模型。...这部分内存不是虚拟机管理,而是由操作系统来管理。 Java通过通过DriectByteBuffer对其进行操作,避免了在 Java 堆和 Native堆来回复制数据。

86600

Java虚拟机

一、概述 虚拟机的类加载机制 :Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制...虚拟机外部的 二进制字节流 就按照虚拟机所设定的格式 存储在方法区之中 了,方法区中的数据存储格式完全由虚拟机实现自行定义,《Java虚拟机规范》未规定此区域的具体数据结构。...Java虚拟机如果不检查输入的字节流,对其完全信任的话,很可能会因为载入了有错误或有恶意企图的字节码流而导致整个系统受攻击甚至崩溃,所以验证字节码是 **Java虚拟机保护自身** 的一项必要措施。...直到 初始化阶段 ,Java虚拟机才 真正开始执行类中编写的Java程序代码 ,将主导权移交给 应用程序 。...因此在Java虚拟机中第一个被执行的()方法的类型肯定是java.lang.Object。

60120
领券