常见面试题的基础总结(JVM篇)
由于这些内容都是比较早之前进行的整理的,所以有的部分是参考了他人的博文,但是由于是之前找的,所以具体的博文链接找不到了,如果原博主看到这个文章或者有人知道其中部分内容的原博文,请与我联系,我将加上原链接,谢谢
1、为什么Java一次编译,到处可运行
- 因为只需要将java文件编译成字节码文件,在运行平台只要有JVM虚拟机就可以运行。这样Java在不同的平台也不需要重新编译,只需要虚拟机把字节码文件转换成具体平台的机器指令。
2、JVM是如何加载文件的
- 首先对于字节码文件,使用Class Loader将class文件记载到内存中。然后使用Exction Engine对命令进行解析。对于使用了不同开发文件的原生库我们可以使用Native interface来为Java所用。
3、Java反射机制
- 对于任何一个类,我们都可以知道这个类的所有属性和方法,对弈任何一个对象我们都能调用他的任意方法和属性。这种动态获取信息以及动态调用对象的方法就是成为Java语言的反射机制。
4、Class Loader
- Class Loader在Java中有着非常重要的作用,它主要工作在Class装载的加载过程,主要作用是从系统外获取Class的二进制数据流。所有的class都是由他来加载很系统,然后交给虚拟机进行连接初始化等操作。过程为
加载-链接(校验-准备-解析)-初始化
5、loadClass和forName区别
- 对于loadClass没有链接,而forName获取的是已经初始化的。优点就是没有链接初始化可以减少资源浪费,需要的时候再进行初始化。
6、JVM内存模型
主要分为程序计数器,虚拟机栈,本地方法栈 这几个是线程私有的。
而堆(包含常量池,数组和类对象)以及MetaSpace(类加载信息)是线程共享的。
程序计数器:记录当前线程执行的字节码行号的指示器,通过改变这个值来选取下一条需要执行的字节码指令。和线程是一对一的关系即“线程私有”的,对于Native方法计数为Undefine
Java虚拟机栈:包含Java方法执行的内存模型,包含多个栈帧。每个栈帧都含有局部变量表,操作栈还有动态连接,返回地址等数据
本地方法栈:与虚拟机栈相似,主要作用是标注了native方法
局部变量存储的是方法执行过程中的所有变量。
操作数栈:入栈、出栈、复制、交换、产生消费变量
7、递归为什么会引发StackOverFlowError异常
- 多次递归一直入栈超出虚拟栈深度
8、JVM三大性能调优参数
-Xss
规定虚拟栈大大小-Xms
堆的初始值-Xmx
堆能达到的最大值
9、Java内存模型中的堆和栈的区别-内存分配策略
- 静态存储:编译时确定每个数据目标在运行时的存储空间需求
- 栈式存储:数据区需求在编译时未知,运行时模块入口确定
- 堆式存储:编译时或者运行时入口都无法确认,动态分配
10、堆和栈的关系与区别
- 联系:
- 引用对象或者数组时,栈中变量保存的是堆中目标的首地址
- 区别:
- 管理方式:栈自动释放,堆需要GC
- 空间大小:栈比堆小
- 碎片相关:栈产生的随便远小于堆
- 分配方式:栈支持动态和静态分配,而堆仅支持动态分配
- 效率:因为底层数据结构不同所以栈效率高于堆
11、元空间、堆、栈、线程独占部分的联系——————内存角度
public class HelloWorld{private String name;public void sayHello(){System.out.println("Hello" + name);} public void setName(String name){this.name = name;}public static void main(String[] args) {int a = 1;HelloWorld hw = new HelloWorld();hw.setName("test");hw.sayHello();}
}
引用参数
本地变量
局部变量
常见面试题的基础总结(JVM篇)相关推荐
- “约见”面试官系列之常见面试题之第九十四篇之MVVM框架(建议收藏)
目录 一句话总结:vm层(视图模型层)通过接口从后台m层(model层)请求数据,vm层继而和v(view层)实现数据的双向绑定. 1.我大前端应该不应该做复杂的数据处理的工作? 2.mvc和mvvm ...
- “约见”面试官系列之常见面试题之第八十篇之css常见属性(建议收藏)
CSS3增加的新的属性和新属性值很多,其中的重点,比如Flex布局,2D3D效果,关键帧动画等,我们会在其他篇拿出来详细讲解,并附上实例和代码,供大家参考学习.本文只介绍其他常用且兼容性良好(IE9及 ...
- “约见”面试官系列之常见面试题之第五十一篇之CSS Sprites(建议收藏)
CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢 ...
- “约见”面试官系列之常见面试题第三十九篇之异步更新队列-$nextTick(建议收藏)
目录 一,前言 二,什么是异步更新队列 三,使用异步更新队列 四,结尾 一,前言 这一篇介绍有关异步更新队列的知识,通过异步更新队列的学习和研究能够更好的理解Vue的更新机制 二,什么是异步更新队列 ...
- “约见”面试官系列之常见面试题第三十八篇之js常见的继承方式(建议收藏)
1.原型链继承 核心: 将父类的实例作为子类的原型 将构造函数的原型设置为另一个构造函数的实例对象,这样就可以继承另一个原型对象的所有属性和方法,可以继续往上,最终形成原型链 父类 // 定义一个动物 ...
- “约见”面试官系列之常见面试题第三十五篇之轮循机制(建议收藏)
目录 前言 任务队列 事件的概念 回调函数 事件轮询机制Event Loop: 结语 前言 有人称Event Loop为事件循环机制,而我更愿意将其解释为事件轮询机制,在之后的内容中你会感受到这一点的 ...
- “约见”面试官系列之常见面试题之第九十五篇之vue-router的组件组成(建议收藏)
<router-link :to='' class='active-class'> //路由声明式跳转 ,active-class是标签被点击时的样式<router-view> ...
- “约见”面试官系列之常见面试题之第九十二篇之created和mounted区别(建议收藏)
beforeCreate 创建之前:已经完成了 初始化事件和生命周期 created 创建完成:已经完成了 初始化注册和响应 beforeMount 挂载之前:已经完成了模板渲染 mounted :挂 ...
- “约见”面试官系列之常见面试题之第八十七篇之ajax发送多个请求优化(建议收藏)
AJAX中同时发送多个请求(并发)对象处理方法 在javascript:;" rel="nofollow" onClick="javascript:tagsho ...
最新文章
- 风格化手绘纹理包 CGTrader – Stylized Mix Vol. 41 – Hand Painted Texture Pack
- 八个防止浪费时间的小窍门
- pip安装mysql-python失败,并显示EnvironmentError:找不到mysql_config
- MVC-Razor(3)
- 服务器重启后启动Docker命令
- 我的编程学习日志(1)--进制转换
- 解决 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working
- 咕泡-模板方法 template method 设计模式笔记
- FreeRTOS调度器挂起与解除
- java中怎样任意跳转到指定行而不受循环语句限制
- C Tricks(十六)—— 复制字符串
- Tensorflow API解析 -目录
- 空间可能与时间一样,也是不可逆转的
- java 判断客户端是手机端还是PC端(SSH框架)
- word中设置多级标题
- 基于java的个人日程管理系统mysql
- linux基础知识ppt下载,《Linux基础知识》PPT课件.ppt
- 行业观点|鞋企转战个性化定制 打响新消费时尚
- Python爬虫之爬取绝对领域美女图片
- 跨不同导向序列的Cas9结合和切割的定量描绘了靶接合的前景
热门文章
- 计算机应用基础教学内容,计算机应用基础教学大纲
- vba的like和正则表达式
- C语言实现“21点”游戏的输入
- python刷OJ入门(指导篇)
- 设置elementui表格的上下左右滚动条
- 机电一体化PLC毕业设计、课程设计案例分享/液压、电梯、洗衣机、送料控制、步进电动机、装瓶流水线、大小球分拣传送、饮料罐装、自动售货机、立体车库、洗衣机、喷泉、机械手、卧式镗床、温度控制、供水系统……
- 获取本机的IP地址代码
- Cesium 个性地图的创建(炫酷大屏)
- 国家卫健委5G+医疗健康应用试点项目建议方向全文
- AT89C51驱动共阴极数码管的应用代码