您的位置: 旅游网 > 图库 >> 美女模特

Java编程究竟什么是Jvm为什么有Jv

发布时间:2020-10-19 18:37:05
Java编程究竟什么是Jvm, 为什么有Jvm? 关于Java虚拟机

首先,我们要先温习一下jvm的概念。究竟什么是jvm,为什么有jvm?

Jvm是Java虚拟机(Java virtual machine)它实现了“一次编译,处处运行”的功能。如果没有jvm的话,我们编写的Java代码,如果想要在window上运行,那就需要编写一套适用于window平台的编码。当然如果想在linux中运行就要编写一套linux能够识别的编码语言。

JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。

类的加载(加载到jvm)

class文件通过类加载器加载到内存

类加载器使用的加载模式:双亲委托机制

当AppClassLoader加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委托给父类加载器ExtClassLoader去完成。

当ExtClassLoader加载一个class时,它首先也不会自己去尝试加载这个类,而是把类加载请求委托给bootStrapClassLoader去完成。

如果BootStrapClassLoader加载失败,会使用ExtClassLoader来尝试加载。

若ExtClassLoader也加载失败,则会使用AppClassLoader来加载。

如果AppClassLoader也加载失败,则会报出异常ClassNotFoundException。

类加载器:

BootStrapClassLoader 启动类加载器 负责jre/lib/rt.jar

ExtClassLoader 扩展类加载器 jre/lib/*.jar或-Djava.ext.dirs

AppClassLoader 应用类加载器 记载classpath中指定的jar包及目录中class

UserClassLoader 自定义的类加载器 继承ClassLoader getClass.ClassLoader可以获得

在类加载检查通过后,接下来虚拟机将为新生对象分配内存。

简单看了一下内存模型,简单看看每隔区域酒精存储的是是什么(干的是什么)

堆:存放对象实例,几乎所有的对象实例都在这里分配内存

本地方法栈:本地方法栈则是为虚拟机使用到的native方法服务。

方法区:存储已经被虚拟机加载的类元数据信息(元空间)

我来宏观的讲解一下工作流程:

1.通过Java.exe运行JavaTest.class,随后被加载到jvm中,方法区(元空间)存储着类的信息(包括类的名称、方法的信息、字段信息)

2.jvm找到JavaTest的主函数入口(main)为main函数创建栈帧,开始执行main函数

3.main函数的第一条命令是javaTest jt=new JavaTest;就是让jvm创建一个javaTest对象,但是这时候方法区中没有JavaTest类的信息,所以jvm马上加载JavaTest类,把javaTest类的类型信息放到方法区中(元空间)

4.加载完javaTest类之后,Java虚拟机做的第一件事情就是在堆区中为一个新的JavaTest实例分配内存,调用构造函数初始化javaTest实例,这个JavaTest实例持有着指向方法区的JavaTest类的类型信息(其中包含方法表,Java动态绑定的底层实现)的引用。

为setName函数创建栈帧,开始运行setName函数。

本文相关词条概念解析:

加载

加载,计算机术语,是把硬盘上的有用程序调到内存中的整个过程。现用于电脑及计算机控制设备方面较普遍,如:硬盘上的有用程序调到内存中的整个过程,一般来说我们在启动程序或安装程序时都会有加载。

方法

(1)[method;way;means](2)古指量度方形的法则(3)现指为达到某种目的而采取的途径、步骤、手段等方法的含义较广泛,一般是指为获得某种东西或达到某种目的而采取的手段与行为方式。它在哲学,科学及生活中有着不同的解释与定义。方法和手段是人们成功办事,或管理者实现管理目的的不可缺少的中介要素。方法虽然也被人们称之为活动的手段,但它不是物化了的手段,是人类认识客观世界和改造客观世界应遵循的某种方式、途径和程序的总和。方法的一个同义词是技术,给人的感觉,方法通俗一些,技术高雅一些。

小孩健脾胃的药
适合牛奶蛋白过敏宝宝食用的奶粉
小儿风热感冒会脘腹胀满吗
先天性心脏病
新生儿能用丁桂儿脐贴吗
猜你会喜欢的
猜你会喜欢的