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

我是小菜,大家能说说java虚拟机具体是怎么运行的?和class类的关系的啦。

发布网友 发布时间:2022-04-12 19:42

我来回答

3个回答

热心网友 时间:2022-04-12 21:12

Java基础很重要 当Java编译器编译好.class文件之后,我们需要使用JVM来运行这个class文件。那么最开始的工作就是要把字节码从磁盘输入到内存中,这个过程我们叫做【加载 】。加载完成之后,我们就可以进行一系列的运行前准备工作了,比如: 为类静态变量开辟空间,将常量池存放在方法区内存中并实现常量池地址解析,初始化类静态变量等等。这篇文章我们要好好谈谈JVM是如何加载class文件的?

1、JVM加载类的过程
当我们使用命令来执行某一个Java程序(比如Test.class)的时候:java Test
(1) java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这才是真正的 Java 虚拟机器 , 最后加载动态库,激活 Java 虚拟机器。
(2) 虚拟机器激活以后,会先做一些初始化的动作,比如说读取系统参数等。一旦初始化动作完成之后,就会产生第一个类装载器 ―― Bootstrap Loader(启动类装载器 ) 。
(3) Bootstrap Loader 所做的初始工作中,除了一些基本的初始化动作之外,最重要的就是加载 Launcher.java 之中的 ExtClassLoader(扩展类装载器) ,并设定其 Parent 为 null ,代表其父加载器为 BootstrapLoader 。
(4) 然后 Bootstrap Loader 再要求加载 Launcher.java 之中的 AppClassLoader(用户自定义类装载器 ) ,并设定其 Parent 为之前产生的 ExtClassLoader 实体。这两个加载器都是以静态类的形式存在的。
这里要请大家注意的是, Launcher$ExtClassLoader.class 与 Launcher$AppClassLoader.class 都是由 Bootstrap Loader 所加载,所以 Parent 和由哪个类加载器加载没有关系。
初学者对这个过程很难理解,我们将在下面详细的讲讲类装载器和"Parent"是什么。

2、类装载器体系结构

JVM加载class文件必须通过一个叫做类装载器的程序,它的作用就是从磁盘文件中将要运行代码的字节码流加载进内存(JVM管理的方法区)中。下面是几个比较重要的概念:

(1) 启动类装载器 : 每个Java虚拟机实现都必须有一个启动类装载器。它只负责在系统类(核心Java API的class文件)的安装路径中查找要装入的类。这个装载器的实现由C++ 所撰写而成,是JVM实现的一部分。

(2) 扩展类装载器和自定义类装载器 : 负责除核心Java API以外的其它class文件的装载。例如、用于安装或下载标准扩展的class文件,在类路径中发现的类库的class文件,用于应用程序运行的class文件等等。这里有一点需要注意:自定义类装载器并非由应用程序员自己实现,它也是JVM

(3) 命名空间: Java虚拟机为每一个类装载器维护一个唯一标识的命名空间。一个Java程序可以多次装载具有同一个全限定名的多个类。 Java虚拟机要确定这"多个类"的唯一性,因此,当多个类 装载器都装载了同名的类时,为了唯一地标识这个类,还要在类名前加上装载该类的类装载器的标识(指出了类所位于的命名空间)。下图显示了两个类装载器有关的命名空间,显然,不同的类装载器允许装载相同的类Volcano。
命名空间有助于安全的实现,因为你可以有效地在装入了不同命名空间的类之间设置一个防护罩。在Java虚拟机中,在同一个命名空间内的类可以直接进行交 互,而不同的命名空间中的类甚至不能察觉彼此的存在,除非显式地提供了允许它们进行交互的机制。一旦加载后,如果一个恶意的类被赋予权限访问其他虚拟机加 载的当前类,它就可以潜在地知道一些它不应该知道的信息,或者干扰程序的正常运行。

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

先编译成.class文件,在有Java虚拟机执行.class文件。

热心网友 时间:2022-04-13 00:04

java虚拟其实就是一个模拟平台,简单点说,windows就是一个平台了,linux也是一个平台,各种不同内核的系统都可以算是一个平台,但是不同平台间的软件是不可以跨平台运行的,你不能拿windows下的一个exe文件到linux下运行,但是,你装了java虚拟机后,他会虚拟出一个平台,来让你运行jar文件,这样就实现了跨平台软件,也就是说你用java写的jar程序可以在任何一种平台上运行,前题是那个系统上要有java虚拟机,一般你下载个完整的java jdk里面就有虚拟平台了,当然,也可以单独下载,这个你可以以后学到这里再了解。class是定义一个类,java是一种面向对象开发的语言,习惯的把一个对象定义为一个类,类的作用很多,你只要按书里的例子写几个,慢慢就会理解,主要来说,我感觉这是一种规范,能让程序开发更方便,例如,你可以定义一个class Student{private String name;private String age;//get set 方法略 //里面同时可以写一些方法,当然真正开发不会这样写,这只是举个例子public void fun(){ //代码实现}}这是你一个问题,你最好找本java程序设计重头到尾看一遍,哪个版本的书无所谓,基础都一样,然后再去弄些corejava的知识,其实corejava就是java基础,只是我们说的corejava是java基础的完整版,而java程序设计的书,就单是最基础的那些入门了,学完corejava你基本可以写出一个比较完整的cs通讯方式的软件另外数据算法这些可有可无,学java不一定要会,但也可以说一定要会,因为要处理一些逻辑关系优化算法这些的很重要,因为程序不止要可以运行,还要有效率。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
墨兰烂根是怎么回事 墨兰烂根后如何养护 谢绝推销参观拍照摄影看房预约 看房子为什么不让拍照 执业药师各科考试时间分配 执业药师考试倒计时100天,怎样备考最有效 中药执业药师怎么备考? 手机拒绝所有来电了怎么设置回来 美国狼人在伦敦演职员表 美国狼人在伦敦幕后制作 美国狼人在伦敦制作发行 钉钉视频会议看电视剧别人能听到声吗 红糖鸡蛋要怎么煮蛋才会包起来 怎么煮鸡蛋皮好包 有效的留住老客户同时吸引新的客户.如题 谢谢了 谁知道word网格线怎么去掉? word中插入excel表格后,网格线怎么删除或调整呢? 橡胶行业,新客户开发,从何做起,怎样拿到单。。? 如何开发新客户的政策和招新手段 dnf特殊符号,高手来!!! 请教:海螺片焯水,水温多少合适?焯多长时间?谢谢 出题目,小学四年级水平,30道解方程和30道简便运算 小学四年级下册简便计算题 微信加别人的时候,出现对方通过搜索添加是怎么回事? 开心消消乐微信支付数据错误 为什么我的开心消消乐只有360支付方式 安卓版开心消消乐,,只有微信支付 怎么没有手机支付的? 开心消消乐 微信支付买风车币扣的是哪里的钱 开心消消乐购买金币、道具怎么用手机话费支付,只有微信支付,没有用手机话费支付的选项,从哪里能添加上 开心消消乐几种支付购买道具方式 开心消消乐买锤子是用什么支付 我想成为一个向马云那样的人演讲稿 演讲稿 我想成为一个(名)...... 长大后我想成为医生的演讲稿50字? 一篇关于我想成为一名美食家的演讲稿100字 取名字大全姓曾。 属木 用丙烯颜料墙绘必须要用调和液吗? 丙烯调和液 无花果发霉还能吃吗 坏了的无花果干是什么样子的 深赤色的无花果干是否烂 win8专业版中如何设置开始菜单按钮? Windows8系统如何设置开始菜单电源按钮的作用 win8开始按钮没有了怎么恢复啊 win8怎么把开始菜单 如何用photoshop的裁剪和自由变换将图片改为你要的像素和大小 win8开始按钮不见了怎么调出来 win8左下角的开始按钮没有了,怎么再恢复 win8如何调出开始菜单 Windows8 RP版有没有开始按钮? WIN8系统屏幕左下角为什么没有开始的按钮?如何关机啊?