Jvm组成,运行时区,堆、栈、队列的区别

题目标签

学习时长: 20分钟
题目难度: 中等
知识点标签: JVM

题目描述

1.JVM主要组成部分?及其作用?
组成部分:
类的加载器(ClassLoader)
运行时数据区(Runtime Data Area)
执行引擎(Execution Engine)
本地库接口(Native Interface)
组件作用:首先通过类加载器(ClassLoader)会把java代码转换为字节码,运行时数据区(Runtime Data Area)会把再把字节码加载到内存中,而字节码文件只是JVM的一套指令规范,并不能直接交给底层操作系统去执行,因此需要特定命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由cpu执行,而这个过程中需要调用其他语言的本地接口(Native Interface)来实现整个程序的功能。

2.JVM运行时数据区
程序计数器
虚拟机栈
本地方法栈

方法区
有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户进程的启动和结束而创建销毁的。

3.堆栈有什么区别
栈内存存储的是局部变量,而堆内存存储的是实体。
栈内存快于堆内存,因为局部变量生命周期很短。
栈内存存放的变量生命周期一旦结束就会被释放,而堆内存对象会被垃圾回收,机制不定时回收。

4.队列和堆栈是什么?有什么区别?
队列和栈都是被用来预存数据的。
队列允许先进先出检查元素,但也有例外情况。Deque接口允许从两端检索元素。
栈和队列相似,但他运行对元素后进先出进行检索。

5.说一下类加载的过程
类加载分为五个部分:
加载: 根据查找路径找到相对应的class文件然后导入
检查: 检查加载的class文件的正确性
准备: 给类中静态变量分配内存空间
解析: 虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存地址中。
初始化: 对静态变量和静态代码块执行初始化工作

6.怎么判断对象是否可以被回收。
引用计数器:为每一个对象创建一个引用计数,有对象引用是计数器+1,引用被释放时-1,当计数器为0时就可以被回收。 当然这样有一个缺点,不能解决循环引用的问题。
可达性分析:从GC ROOTS开始向下搜索,搜索走过的路径成为引用链。当一个对象到GC Roots没有任何引用相连接的时候,则证明此链接可以被回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值