Java:JVM 和类

33 篇文章 1 订阅

运行 Java:java 带有 main 方法的类名 ----->
启动 JVM 并加载字节码
当调用 java 命令来运行某个 Java 程序时,该命令将会启动一个 JVM 进程,同一个 JVM 中的所有线程,变量都处于同一进程中,共享该JVM的内存区域。
当出现以下情况时,JVM 会退出

	1.当程序正常执行结束
	2.使用 System.exit(0) 方法
	3.出现异常时,没有捕获异常
	4.平台强制结束了JVM进程

JVM进程一旦结束,该进程中内存中的数据将会丢失

这里写图片描述
  当程序主动使用某个类时,如果该类还未被加载进内存中,则系统会通过加载 -> 连接 -> 初始化,三个步骤来对该类进行初始化操作。
##1.类的加载
类加载时指将类的 class 文件(字节码文件)载入内存中,并为之创建一个 java.lang.Class 对象,称之为字节码对象。
  类的加载过程由类加载器(ClassLoader)完成,类加载器通常由 JVM 提供,称之为系统类加载器,也可以继承 ClassLoader 来提供自定义类加载器。不同的类加载器可以实现加载本地字节码文件、jar包中的字节码、通过网络加载字节码等。

##2.类的连接
当类被加载进内存之后,系统为之生成一个对应的 Class 对象,接着把类的二进制数组合并到 JRE 中

	1.验证:检测被加载的类是否有正确的内部结构
	2.准备:负责为类的 static 变量分配内存,并设置默认值
	3.解析:把类的二进制数据中的符号引用替换为直接引用

###3.类的初始化:
在此阶段,JVM 负责对类进行初始化,主要就是对 static 变量进行初始化,
类的初始化包含以下几个步骤

1.如果该类还未被加载和连接,则程序先加载并连接该类
2.如果该类的直接父类还未被初始化,则先初始化其父类
3.如果类中有初始化语句(静态代码块),则系统依次执行这些初始化语句

附:符号引用:
符号引用是一个字符串,它给出了被引用的内容的名字,并且可能会包含一些其他大于这个被引用项的信息 --> 这些信息必须是足以唯一的识别一个类、字段、方法。这样,对于其他类的符号引用必须给出此类的全名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值