Java - 类加载器 和 JVM

类加载器

JVM理论
Java语言一个重要特点是与平台无关,因为不同平台有自己的JVM,JVM执行字节码文件时,把字节码文件解释成具体平台上的机器指令
JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际计算机上仿真模拟各种计算机功能来实现的
JVM是Java程序的运行环境,也是操作系统的一个进程,因此他有自己的运行生命周期,也有自己的代码和数据空间
JVM在整个JDK中处于最底层,负责和操作系统交互,用来屏蔽操作系统环境,提供完整的Java运行环境
JVM执行程序的过程
加载字节码文件
管理并分配内存
执行垃圾收集



JVM组成

寄存器:我们在程序中无法控制
栈:存放基本数据类型和对象引用
堆:存放使用new产生的数据
静态域:存放对象中使用static定义的静态成员
常量池:存放常量
非RAM存储:硬盘等永久存储空间

常量池

常量池是在编译期被确定,并保存在已编译的字节码文件中
JVM必须为每个被装载的类维护一个常量池
常量池存放基本类型,对象类型的常量值(final),
	还有一些文本形式出现的符号引用
		类和接口的全限定名
		字段的名称和描述符
		方法的名称和描述符
常量池中有一个固定长度的CONSTANT_String_info表
	他存放String常量的值,不存储符号引用
在程序执行的时候,常量池存储在Method Area,不是在堆中

栈中存放基本数据类型的变量数据和对象的引用
栈的基本单位是帧
java线程运行时,JVM会为每个线程分配一个java栈,
	该线程执行某个java方法时,向栈压入一个帧,
	这个帧用于存储参数,局部变量,操作数,中间运算结果等,
	当方法执行完的时候,帧会从栈中弹出,
java栈上的所有数据都是私有的,其他线程都不能访问该线程的栈数据
栈中的变量退出作用域后,java会自动释放掉该变量所分配的内存空间
栈的优点
	存储速度比堆快,仅次于寄存器,栈数据是可以共享的
栈的缺点
	存储在栈中的数据大小,生命周期必须是确定的,缺乏灵活性
栈中数据共享的意思是
	值共享,例如int a=3;int b=3;意思是a引用和b引用都指向栈中的同一个3

堆中存放new创建的对象和数组
在堆中分配的内存,由JVM自动的垃圾回收机制来管理
堆主要用来存放对象和数组,栈主要用来存放对象和数组的引用,
	在堆中产生一个对象和数组后,还可以在栈中定义一个特殊变量,
	让栈中的这个变量的取值等于对象和数组在堆内存中的首地址,
	栈中的这个变量就成了对象和数组的引用变量
当没有引用变量指向对象或数组时,对象或数组就成了垃圾,
	对象或数组占的内存不会自动释放,在之后不确定的时间被垃圾回收器释放
	这也是java比较占内存的原因
堆的优点
	java堆是一个运行时的数据区,运行期可以动态分配内存大小,自动释放垃圾所占内存空间
堆的缺点
	运行期动态分配内存,存取速度慢

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值