当前位置:正文

就会将其加载到jvm中安卓

发布日期:2024-05-29 15:52    点击次数:170

 安卓引子安卓

一个月没更新了,这个月发生了太多的事情,导致更新的频率大大缩短,无论若何打理热情,工夫的参议不成落下!

什么是jvm

等闲咱们编写代码王人是编写的.java文献,若何部署到机器上运行呢?通过打jar包粗略war包,然后部署运行。

 

对于Jvm类加载机制,这一篇就够了

 

要是看过jar包的本色那么就能知谈,咱们写的.java文献一齐被编译成了.class文献。

这里发生了很伏击的一个款式—— 编译 :将咱们写的程序翻译成能被jvm读懂的文献神气。

值得留意的是,每一个 类 王人会被编译成一个.class文献,包括里面类等。也即是说每一个.class文献王人只对应咱们代码中的一个类。

类的生命周期

类被加载到jvm假造机内存出手,到卸载出内存规模,他的生命周期不错分为:加载->考据->准备->认识->运转动->使用->卸载。

底下咱们来对此逐个阐扬:

加载

当生成一个jar包以后,咱们编写的程序就一齐编编译成了jvm能读懂的.class神气。此时就需要加载了,将咱们的编译好的.class文献加载到jvm中。此时就会有一个“类加载器”的见识。如下图。

 

对于Jvm类加载机制,这一篇就够了

 

接下来一个问题,类加载器何时会将一个.class加载带jvm?也即是说什么情况下会加载一个类?

一个jar包运行的期间会指定一个main()款式算作进口款式。领先就会将main()款式地方的类加载到jvm,现代码扩充遭受new的期间又不竭将该对象加载到jvm。

是以归来来说,即是在 你的代码中需要用到这个类的期间 ,就会将其加载到jvm中。

考据

这个不需要阐述的太深,很直白的意思意思意思意思,不成什么阿猫阿狗王人能被加载到jvm中,要不就乱套了。是以该阶段即是来校验加载进来的.class文献是否稳妥指定的规则。

有一个很酷爱的即是,每个.class文献王人很猖厥,因为每一个.class文献王人是以8个十六进制的 0×CAFEBABE,翻译过来即是咖啡宝贝。猖厥吧?在考据阶段的第一步即是查验.class文献是否以咖啡宝贝来起首的。

是以咱们的经由图不错更新为

 

对于Jvm类加载机制,这一篇就够了

 

准备

当咱们正当的把一个.class文献加载到jvm中后,此时就会进行一些准备责任。

领先为这个类分拨内存空间,然后为类变量(被static修饰的变量)赋值一个默许的运转值。然则要是类变量同期被final修饰的话,就不是赋值运转值而是 具体的值

用底下两种情况来阐扬:

public class Student{  private static int age = 18; } //此时就会为age变量分拨内存空间而况为其赋值 0 这个运转值。 public class Student{  private static final int age = 18; } //age被final修饰,此时就会为age变量分拨内存空间而况为其赋值为 18 。 

是以咱们的经由图不错更新为

 

对于Jvm类加载机制,这一篇就够了

 

认识

认识阶段即是jvm将常量池的标志援用替换为径直援用。

简便的来说即是咱们编写的代码中,当一个变量援用某个对象的期间,这个援用在.class文献中是以标志援用来存储的。在认识阶段就需要将其认识为径直援用。要是有了径直援用,那援用的策画必定照旧在内存中存在。

是以咱们的经由图不错更新为

 

对于Jvm类加载机制,这一篇就够了

 

运转动

在准备阶段咱们照旧为加载到jvm的类分拨了内存空间而况为类变量赋予了运转值。

而到了运转动阶段,才信得过出手扩充类中界说的java程序代码。主要有以下款式:

为类的静态变量赋予正确的运转值。 扩充类的静态代码块。

按照王法从上至下运行类中的变量赋值语句和静态语句,而况只须类或接口被Java程序初次主动使用时才运转动他们。要是有父类,则领先按照王法运行父类中的变量赋值语句和静态语句。

是以咱们的经由图不错更新为

 

对于Jvm类加载机制,这一篇就够了

 

归来

在一个静态款式中咱们是不成径直使用非静态变量的。当咱们使用静态款式的期间安卓,只是是运转动了静态款式地方的类,此时只须静态变量是被赋了值而非静态变量是莫得被赋值的。是以在静态款式中是不成径直使用非静态变量的。





Powered by 🏆华体汇·体育全站app官网入口(中国)官方网站IOS安卓/通用版/手机版APP下载 @2013-2022 RSS地图 HTML地图