问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JVM原理是什么?

发布网友 发布时间:2022-04-23 13:47

我来回答

4个回答

热心网友 时间:2022-04-12 17:36

首先这里澄清两个概念:JVM实例和JVM执行引擎实例,JVM实例对应了一个独立运行的Java程序,而JVM执行引擎实例则对应了属于用户运行程序的线程;也就是JVM实例是进程级别,而执行引擎是线程级别的。JVM是什么?—JVM的生命周期JVM实例的诞生:当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有publicstaticvoidmain(String[]args)函数的class都可以作为JVM实例运行的起点,既然如此,那么JVM如何知道是运行classA的main而不是运行classB的main呢?这就需要显式的告诉JVM类名,也就是我们平时运行Java程序命令的由来,如JavaclassAhelloworld,这里Java是告诉os运行SunJava2SDK的Java虚拟机,而classA则指出了运行JVM所需要的类名。JVM实例的运行:main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,Java程序也可以标明自己创建的线程是守护线程。JVM实例的消亡:当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出。JVM是什么?—JVM的体系结构粗略分来,JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。下面将先介绍类装载器,然后是执行引擎,最后是运行时数据区1、类装载器,顾名思义,就是用来装载.class文件的。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类。(下面所述情况是针对SunJDK1.2)动类装载器:只在系统类(JavaAPI的类文件)的安装路径查找要装入的类用户自定义类装载器:系统类装载器:在JVM启动时创建,用来在CLASSPATH目录下查找要装入的类其他用户自定义类装载器:这里有必要先说一下ClassLoader类的几个方法,了解它们对于了解自定义类装载器如何装载.class文件至关重要。protectedfinalClassdefineClass(Stringname,bytedata[],intoffset,intlength) protectedfinalClassdefineClass(Stringname,bytedata[],intoffset,intlength,ProtectionDomainprotectionDomain);protectedfinalClassfindSystemClass(Stringname) protectedfinalvoidresolveClass(Classc) defineClass用来将二进制class文件(新类型)导入到方法区,也就是这里指的类是用户自定义的类(也就是负责装载类)findSystemClass通过类型的全限定名,先通过系统类装载器或者启动类装载器来装载,并返回Class对象。ResolveClass:让类装载器进行连接动作(包括验证,分配内存初始化,将类型中的符号引用解析为直接引用),这里涉及到Java命名空间的问题,JVM保证被一个类装载器装载的类所引用的所有类都被这个类装载器装载,同一个类装载器装载的类之间可以相互访问,但是不同类装载器装载的类看不见对方,从而实现了有效的屏蔽。2、执行引擎:它或者在执行字节码,或者执行本地方法要说执行引擎,就不得不的指令集,每一条指令包含一个单字节的操作码,后面跟0个或者多个操作数。(一)指令集以栈为设计中心,而非以寄存器为中心这种指令集设计如何满足Java体系的要求:平台无关性:以栈为中心使得在只有很少register的机器上实现Java更便利compiler一般采用stack向连接优化器传递编译的中间结果,若指令集以stack为基础,则有利于运行时进行的优化工作与执行即时编译或者自适应优化的执行引擎结合,通俗的说就是使编译和运行用的数据结构统一,更有利于优化的开展。网络移动性:class文件的紧凑性。安全性:指令集中绝大部分操作码都指明了操作的类型。(在装载的时候使用数据流分析期进行一次性验证,而非在执行每条指令的时候进行验证,有利于提高执行速度)。(二)执行技术主要的执行技术有:解释,即时编译,自适应优化、芯片级直接执行其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式自适应优化:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行。3、运行时数据区:主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈(1)方法区和堆由所有线程共享堆:存放所有程序在运行时创建的对象方法区:当JVM的类装载器加载.class文件,并进行解析,把解析的类型信息放入方法区。(2)Java栈和PC寄存器由线程独享,在新线程创建时间里(3)本地方法栈:存储本地方法调用的状态上边总体介绍了运行时数据区的主要内容,下边进行详细介绍,要介绍数据区,就不得不说明JVM中的数据类型。JVM中的数据类型:JVM中基本的数据单元是word,而word的长度由JVM具体的实现者来决定数据类型包括基本类型和引用类型,(1)基本类型包括:数值类型(包括除boolean外的所有的Java基本数据类型),boolean(在JVM中使用int来表示,0表示false,其他int值均表示true)和returnAddress(JVM的内部类型,用来实现finally子句)。(2)引用类型包括:数组类型,类类型,接口类型前边讲述了JVM中数据的表示,下面让我们输入到JVM的数据区首先来看方法区:上边已经提到,方法区主要用来存储JVM从class文件中提取的类型信息,那么类型信息是如何存储的呢?众所周知,Java使用的是大端序(big?endian:即低字节的数据存储在高位内存上,如对于1234,12是高位数据,34为低位数据,则Java中的存储格式应该为12存在内存的低地址,34存在内存的高地址,x86中的存储格式与之相反)来存储数据,这实际上是在class文件中数据的存储格式,但是当数据倒入到方法区中时,JVM可以以任何方式来存储它。类型信息:包括class的全限定名,class的直接父类,类类型还是接口类型,类的修饰符(public,等),所有直接父接口的列表,Class对象提供了访问这些信息的窗口(可通过Class.forName(“”)或instance.getClass()获得),下面是Class的方法,相信大家看了会恍然大悟,(原来如此J)getName(),getSuperClass(),isInterface(),getInterfaces(),getClassLoader();static变量作为类型信息的一部分保存指向ClassLoader类的引用:在动态连接时装载该类中引用的其他类指向Class类的引用:必然的,上边已述该类型的常量池:包括直接常量(String,integer和floatpoint常量)以及对其他类型、字段和方法的符号引用(注意:这里的常量池并不是普通意义上的存储常量的地方,这些符号引用可能是我们在编程中所接触到的变量),由于这些符号引用,使得常量池成为Java程序动态连接中至关重要的部分字段信息:普通意义上的类型中声明的字段方法信息:类型中各个方法的信息编译期常量:指用final声明或者用编译时已知的值初始化的类变量class将所有的常量复制至其常量池或者其字节码流中。方法表:一个数组,包括所有它的实例可能调用的实例方法的直接引用(包括从父类中继承来的)除此之外,若某个类不是抽象和本地的,还要保存方法的字节码,操作数栈和该方法的栈帧,异常表。举例:classLava{ privateintspeed=5; voidflow(){} classVolcano{ publicstaticvoidmain(String[]args){ Lavalava=newLava(); lava.flow(); } } 运行命令JavaVolcano;(1)JVM找到Volcano.class倒入,并提取相应的类型信息到方法区。通过执行方法区中的字节码,JVM执行main()方法,(执行时会一直保存指向Vocano类的常量池的指针)(2)Main()中第一条指令告诉JVM需为列在常量池第一项的类分配内存(此处再次说明了常量池并非只存储常量信息),然后JVM找到常量池的第一项,发现是对Lava类的符号引用,则检查方法区,看Lava类是否装载,结果是还未装载,则查找“Lava.class”,将类型信息写入方法区,并将方法区Lava类信息的指针来替换Volcano原常量池中的符号引用,即用直接引用来替换符号引用。(3)JVM看到new关键字,准备为Lava分配内存,根据Volcano的常量池的第一项找到Lava在方法区的位置,并分析需要多少对空间,确定后,在堆上分配空间,并将speed变量初始为0,并将lava对象的引用压到栈中(4)调用lava的flow()方法好了,大致了解了方法区的内容后,让我们来看看堆Java对象的堆实现:Java对象主要由实例变量(包括自己所属的类和其父类声明的)以及指向方法区中类数据的指针,指向方法表的指针,对象锁(非必需),等待集合(非必需),GC相关的数据(非必需)(主要视GC算法而定,如对于标记并清除算法,需要标记对象是否被引用,以及是否已调用finalize()方法)。那么为什么Java对象中要有指向类数据的指针呢?我们从几个方面来考虑首先:当程序中将一个对象引用转为另一个类型时,如何检查转换是否允许?需用到类数据其次:动态绑定时,并不是需要引用类型,而是需要运行时类型,这里的迷惑是:为什么类数据中保存的是实际类型,而非引用类型?这个问题先留下来,我想在后续的读书笔记中应该能明白指向方法表的指针:这里和C++的VTBL是类似的,有利于提高方法调用的效率对象锁:用来实现多个线程对共享数据的互斥访问等待集合:用来让多个线程为完成共同目标而协调功过。(注意Object类中的wait(),notify(),notifyAll()方法)。Java数组的堆实现:数组也拥有一个和他们的类相关联的Class实例,具有相同dimension和type的数组是同一个类的实例。数组类名的表示:如[[LJava/lang/Object表示Object[][],[I表示int[],[[[B表示byte[][][]至此,堆已大致介绍完毕,下面来介绍程序计数器和Java栈程序计数器:为每个线程独有,在线程启动时创建,若thread执行Java方法,则PC保存下一条执行指令的地址。若thread执行native方法,则Pc的值为undefinedJava栈:Java栈以帧为单位保存线程的运行状态,Java栈只有两种操作,帧的压栈和出栈。每个帧代表一个方法,Java方法有两种返回方式,return和抛出异常,两种方式都会导致该方法对应的帧出栈和释放内存。帧的组成:局部变量区(包括方法参数和局部变量,对于instance方法,还要首先保存this类型,其中方法参数按照声明顺序严格放置,局部变量可以任意放置),操作数栈,帧数据区(用来帮助支持常量池的解析,正常方法返回和异常处理)。本地方法栈:依赖于本地方法的实现,如某个JVM实现的本地方法借口使用C连接模型,则本地方法栈就是C栈,可以说某线程在调用本地方法时,就进入了一个不受JVM*的领域,也就是JVM可以利用本地方法来动态扩展本身。相信大家都明白JVM是什么了吧。原文链接: http://www.cnblogs.com/chenzhao/archive/2011/08/14/2137713.html

热心网友 时间:2022-04-12 18:54

JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.
1.创建JVM装载环境和配置
2.装载JVM.dll
3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例
4.调用JNIEnv实例装载并处理class类。

热心网友 时间:2022-04-12 20:28

简单说JVM你可以认为是一套完整的自定义的指令系统,它工作就是完成一种指令的编码和解释工作,如果你想了解的透彻点我推荐你可以读下JVM的源码,或者看些相关虚拟机实现原理的书籍

热心网友 时间:2022-04-12 22:20

咕泡学院 James讲JVM看了就知道,百度搜索 咕泡学院
jvm底层原理是什么呢?有大神可以说说吗?

JVM是Java虚拟机的简称,它是Java语言的核心,负责解释和执行Java代码。JVM的底层原理包括以下几个方面:1.类加载器:JVM使用类加载器将编译好的Java文件加载,在运行时将编译后的字节码转换为机器码。2.内存管理:JVM对内存进行分配和管理,包括堆、栈等多种内存结构。3.执行引擎:JVM的执行引擎可以将...

proximity ligation assay 原理是什么?

Duolink PLA技术可通过同一个实验即可完成对蛋白质互作及其修饰的检测、定量以及确定细胞定位等。Duolink基于原位PLA技术(即邻位连接分析技术),可以帮助您在内源蛋白质表达过程中进行该分析。

JVM原理是什么?

JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.1.创建JVM装载环境和配置2.装载JVM.dll3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例4.调用JNIEnv实例装载并处理class类。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 匿名用户 2013-09-13 展开...

虚拟机是怎样运行的,原理是什么?

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。原理:从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件。然后JRE加载Java字节码文件,载入系统分配给JVM的内存区,然...

详解JVM工作原理和特点

JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java exe来完成 通过下面 步来完成JVM环境 创建JVM装载环境和配置 装载JVM dll 初始化JVM dll并挂界到JNIENV(JNI调用接口)实例 调用JNIEnv实例装载并处理class类 在我们运行和调试Java程序的时候 经常会提到一个JVM的概念 JVM是Java程序运行的环境 ...

什么是JVM?Java跨平台的原理是什么?

它的实现原理是在系统层面上又增加了一层虚拟机(Java Virtual Machine,简称JVM),且为每个平台都定制了对应的虚拟机。然后Java程序是在虚拟机上跑的,因此平台无关。Java的运行流程是:程序员写了源代码(Source Code,.java后缀,跨平台),然后经过编译器编译成字节码(Byte Code,.class后缀,二...

Java的运行原理及JVM虚拟机是怎么工作的

运行原理:java程序就是花盆里的花,花盆就是虚拟机。花盆你放在哪里(系统平台)都可以,不影响花的生长。就这么简单 JVM的工作原理:首先,JVM就是指JAVA虚拟机 首先编译器,先将java程序源代码编译成字节码。运行程序时:JVM会加载和解释字节码,并通过JAVA虚拟机运行 这个问题,有很多详细的资料可查...

jvm java虚拟机的工作原理?

一、什么是Java虚拟机Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。1.为什么要使用Java虚拟机Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在...

java虚拟机工作原理?

从宏观上介绍一下Java虚拟机的工作原理。从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件,然后JRE加载Java字节码文件,载入系统分配给JVM的内存区,然后执行引擎解释或编译类文件,再由即时编译器将字节...

描述一下JVM加载class文件 的原理机制?

Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。类装载方式,有两种 1.隐式装载...

Java平台是什么?其运行原理与一般的操作平台有何不同? 何为字节码?采 ...

Java平台:是sun公司开发的编程平台,后来被Oracle收购。这是一个程序开发和运行的平台。运行原理:底层是用c语言写的运行库,也可以说是jvm(java虚拟机)。它是编程平台,不是操作平台(我的理解是你说的操作平台就是操作系统),没有可比性。字节码:java程序写好后会被编译字节码,然后jvm装载该字节码...

原理是什么 是什么的基本原理 光的原理是什么 反应原理是什么 功的原理是什么 电话原理是什么 设计原理是什么 液压的原理是什么 科技原理是什么
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
提高跳跃能力的方法有哪些 巴西红耳龟雌雄如何辨别 新浪微博有没有登录次数的显示 淡粉色是什么颜色 粉色的rgb photoshop调粉红色一般用GRB数值是多少 对于日常饮用,哪款‏苏打水最为适宜? 一剑独尊五维境界等级划分? ...一是董永,二是许仙,…三是宁采臣…一个日了仙,一个日了妖,还有一... 欢乐拼三张怎么提升获胜几率?欢乐拼三张经典模式获胜技巧 Java JVM怎么学习啊?从哪方面入手 Java如何调用本地dll库里面的方法 jvm中线程本地内存是真实存在的,还是一个抽象概念 在java本地方法调用中,jni.h这个文件起到的作用是什么?它和jniEvn是什么关系?为什么必须要引入jni.h... 怎样理解java native方法 Java栈和本地方法栈方法调用栈,这些都是什么? java中的本地方法 Java的方法区和本地方法区有何不同?什么是Native Method? 在java中本地方法是什么意思? JAVA本地方法详解,什么是JAVA本地方法 jvm在调用native本地方法时,本地方法是由谁执行的? 苹果xr用久了声音变小了是什么原因? 我的扶桑花肥上多了换了花盆为什么还是没见好转 需要换花土是养了一年的扶桑。 扶桑花怎样养? 电脑能播放视频但没有声音怎么回事? 前两天我把扶桑移植到新的花盆 大夏天会不会死啊? 电脑播放视频时候没声音,怎么办? 为什么买的扶桑花都是黄胶泥土,换盆也不活,几天后奄奄一息了? 我的电脑音响听音乐有声音 可看视频却没有声音 请问是怎么回事呢 2016年,Java还有必要使用本地方法以提高性能吗 native的JVM与Native Method java怎么获取本地文件路径 住街边,隔音玻璃贴膜有用吗,可以做到基本静音吗 玻璃贴膜能增强强度?玻璃在静态下的强度是多少?谢谢! 无胶电静贴膜可以用在淋浴玻璃隔断吗?它与带粘胶玻璃贴膜哪个更合适呢?是贴在里面还是外面呢? 苹果手机屏幕有时会点不动? 有没有什么东西是透明的,贴在玻璃上隔音效果又比较好的东西 苹果手机触摸屏有时候管用有时候不管用怎么回事 受不了噪音,想换中空玻璃窗,或者隔音贴膜? 苹果手机屏幕时灵时不灵是怎么回事 玻璃怎么隔音 请问建军节是几月几日呢? 建筑玻璃贴膜的功能 苹果手机屏幕时好时坏怎么办?如何解决? 玻璃幕墙贴膜施工方法? 手机玻璃钢化膜粘面不干静怎么办 苹果手机屏幕有时失灵是怎么回事 玻璃上可以贴墙纸吗? 玻璃贴安全膜的好处是什么?