JVM-入门1

自变量:字符串,final修饰
符号引用:类,接口,字段,方法名称描述
直接引用:类,接口,字段,方法名称在JVM中落地

在这里插入图片描述
JVM有什么用?作为桥梁使Java程序在不同的环境里运行。
将源码翻译成字节码文件(16进制,并不是2进制;开头0xCAFEBABE)

装载 > 链接 (1.验证 (判断格式准确性) > 初始化 > 使用
2.准备 (分配内存,准备阶段完成,默认值为0)
3.判断 ())

类加载机制(ClassFile >> 字节流 >> 类加载器)
在这里插入图片描述
双亲委派:类加载时,不论自己是否加载,都会先去找自己的父类,如父类存在则先加载父类。
打破双亲委派的方法:1.复写 2.SPI 3.OSGI

在这里插入图片描述
运行时数据区
线程共享
方法区(非堆)Method Area:类信息,静态变量,常量,即时编译器编译后的代码(生命周期跟进程所绑定,如果不够用了,则会抛出OutOfMemoryError内存溢出异常)
堆Heap:代表类的java.lang.Class对象,在虚拟机启动时创建,被所有线程所共享。主要存分对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。
1.内存最大,线程共享
2.Java的实例对象都在堆上分配
3.也会报OutOfMemoryError异常

线程私有
Java虚拟机栈:
线程私有,生命周期与线程一致。描述的是Java方法执行的内存模型。
每调用一个方法就在栈中压入一个栈帧,方法完成就会讲栈帧弹出。
栈帧(栈执行的最小单位invoke)
无限压入栈就会报StackOverflowError异常
在这里插入图片描述

程序计数器(保证程序按顺序执行):
内存小,线程私有。每个线程都有自己的PC寄存器,在线程启动时创建,PC寄存器的内容总是指向下一条将被执行指令的地址。
如果执行Java方法,则记录线程所执行到的位置
如果执行native方法,则记录为空

本地方法栈(native):
区别于Java虚拟机栈的是,Java虚拟机栈为虚拟机执行Java方法(字节码)服务,而本地方法栈则是为虚拟机使用到Native方法服务。也会有StackOverflowErroe和OutOfMemoryError异常。

Java对象的结构
在这里插入图片描述

面试题:1.什么是符号引用转变成直接引用?
符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。
直接引用则是在堆中开辟了内存空间
2.接口隔离和单一职责?
一个针对接口,一个针对类,一个接口/类只做一件事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值