大数跨境

测试开发成长课堂——第二期

测试开发成长课堂——第二期 慧测
2019-08-16
2
导读:慧测微课程活动正式启动。持续关注慧测,每天进步一点!


慧测微课程活动正式启动。持续关注慧测,每天进步一点!


讲师:房老师

本期语音讲解




各位测试界小伙伴们


大家好,我是慧测的房老师,


欢迎大家参加慧测的2019年系列微课程活动。


本套课程主要分为两部分内容:


《每期一道名企面试题分析》


《每期5分钟测试开发小课堂》


目的是让大家利用好碎片化时间,每天积累一点技术。


今天是我们《每期一道名企面试题分析》微课程的第2期内容。


在这门系列课程的每一期,


我都会带领大家分析一道近期一线互联网公司测试开发笔、面试题。


让大家了解企业对技术的考察点,也帮助大家每期积累一个知识点。


本期要分析的是一道 JVM虚拟机 相关的面试题。


有请题目登场:



      简述JVM虚拟机由哪几部分组成?


程序计数器


     程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,可以理解为是当前线程的行号指示器。


字节码解释器在工作时,会通过改变这个计数器的值来取下一条语句指令。


虚拟机栈


  一个线程的每个方法在执行的同时,都会创建一个栈帧(Statck Frame),栈帧中存储的有局部变量表、操作站、动态链接、方法出口等,    当方法被调用时,栈帧在JVM栈中入栈,当方法执行完成时,栈帧出栈。


   局部变量表中存储着方法的相关局部变量,包括各种基本数据类型,对象的引用,返回地址等。


虚拟机栈中定义了两种异常,如果线程调用的栈深度大于虚拟机允许的最大深度,则抛出StatckOverFlowError(栈溢出);


不过多数Java虚拟机都允许动态扩展虚拟机栈的大小(有少部分是固定长度的),所以线程可以一直申请栈,直到内存不足,此时,会抛出OutOfMemoryError(内存溢出)。


本地方法栈


   本地方法栈在作用,运行机制,异常类型等方面都与虚拟机栈相同,唯一的区别是:虚拟机栈是执行Java方法的,而本地方法栈是用来执行native方法的,在很多虚拟机中(如Sun的JDK默认的HotSpot虚拟机),会将本地方法栈与虚拟机栈放在一起使用。


堆区


  在JVM所管理的内存中,堆区是最大的一块,堆区也是Java GC机制所管理的主要内存区域,堆区由所有线程共享,在虚拟机启动时创建。


堆区的存在是为了存储对象实例,原则上讲,所有的对象都在堆区上分配内存(不过现代技术里,也不是这么绝对的,也有栈上直接分配的)。


方法区


  方法区是各个线程共享的区域,用于存储已经被虚拟机加载的类信息(即加载类时需要加载的信息,包括版本、field、方法、接口等信息)、final常量、静态变量、编译器即时编译的代码等。


直接内存


    直接内存并不是JVM管理的内存,可以这样理解,直接内存,就是JVM以外的机器内存。


比如,你有4G的内存,JVM占用了1G,则其余的3G就是直接内存,JDK中有一种基于通道(Channel)和缓冲区(Buffer)的内存分配方式,将由C语言实现的native函数库分配在直接内存中,用存储在JVM堆中的DirectByteBuffer来引用。


由于直接内存收到本机器内存的限制,所以也可能出现OutOfMemoryError的异常。


以上就是今天面试题分享的全部内容,我们下期再见。







-END-




上期回顾:


测试开发成长课堂——第一期





欢迎加入慧测学习社区





慧测8月开班信息:

(别等啦,错过可能就是明年学习啦)

8月18日——自动化17期

8月18日——测试开发6期

8月18日——性能29期

8月18日——Python共享2期








欢迎加入我们:

慧测官网:www.huicewang.com

慧测Python群:324015481

公开课服务群:623636110

咨询QQ:2657535456

咨询微信号:huice666


慧测腾讯课堂 课程地址












【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404