JVM相关面试题

JVM内存区域

线程共享区:

1,堆:主要用来存放对象实例,也是GC管理的主要区域

2. 方法区:已加载类的信息,常量,静态量都存在这

线程私有区:

1. 虚拟机方法栈:生命周期与线程线程相同,里面由方法对应的栈帧构成,栈帧里面有局部变量,常量池引用,和对象引用

2. 本地方法栈:服务于Native方法,提供本地方法接口

3. 程序计数器:用来存放线程的下一个字节码指令,线程的恢复,跳转也依赖于他

JVM调优

1.JVM三大性能调优参数-Xss:规定每个线程虚拟机(堆栈)的大小-Xms:堆的初始值-Xmx:堆能达到的最大值。

2. GC调优的目的: 将转移到老年代的对象数量降低到最小 减少GC的执行时间GC优化是最后不得已才采用的手段

3. 调优:a. 查看堆空间大小分配(年轻代、年老代、持久代分配)

               b. 垃圾回收监控:长时间监控回收情况

               c. 线程信息监控:系统线程数量

              d. 线程状态监控:各个线程都处在什么样的状态下

              e. 线程详细信息:查看线程内部运行请况,死锁检查

              f. CPU热点:检查系统哪些方法占用了大量的CPU时间

              g. 内存热点,检查哪些对象在系统中数量最大

简要说明JAVA虚拟机的内存回收机制

传统的C/C++,需要程序员负责回收已经分配内存。

显式回收垃圾的缺点:

1、程序员忘记及时回收,从而导致内存泄漏,降低系统的性能

2、程序错误回收程序核心类库的内存,导致系统崩溃

Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,称为垃圾回收机制,简称GC

1、可以提高编程效率。

2、保护程序的完整性

3、其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的

垃圾回收机制的特点:

1、垃圾回收机制回收JVM堆内存里的对象空间,不负责栈内存数据

2、垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行

3、可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象

垃圾回收机制回收任何对象之前,总会先调用他的finalize方法,他是在Object类中定义的,因此所有的类都继承了他,子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。一般情况下这个方法由JVM调用,程序员不要去调用。

java虚拟机的概述(内存结构概述)

java虚拟机是一台执行java字节码的虚拟计算机,它拥有独立的运行机制其运行的java字节码也未必由java语言编译而成。

jvm平台的各种语言可以共享java虚拟机带来的跨平台性,优秀的垃圾回收器,以及可靠的即时编译器。

java技术的核心就是java虚拟机(JVM,java Virtual Machine)因为所有的java程序都运行在java虚拟机内部。

java虚拟机就是二进制字节码的运行环境。

特点

一次编译,到处运行

自动内存管理

自动垃圾回收功能

跨语言的平台

java虚拟机只关心字节码文件的是否符合规范,不限于java的字节码

java虚拟机是最强大的虚拟机,甚至比java语言本身地位还高

jvm的整体结构

jvm的执行流程:

其中存在两次编译,第一次是java代码编译成字节码文件,第二次是字节码文件编译成机器指令

1. java文件被编译器编译成class文件

2. class文件被类装载器加载到内存中的方法区

3. JVM执行引擎读取方法区的字节码进行执行(即:解析执行、编译执行或者两者兼有)

4. 输出执行结果

jvm的生命周期

虚拟机的启动:

java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class) 来完成的,这个类是由虚拟机的具体实现指定的

虚拟机的执行:

一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。

程序开始执行时他才运行,程序结束时他就停止。

执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程。

虚拟机退出:

有以下几种情况:

程序正常执行结束

程序在执行过程中遇到了异常或错误而异常终止

由于操作系统出现错误而守致Java虚拟机进程终止某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。

除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

双亲委派机制

概念:

Java虚拟机对class文件采用的是==按需加载==的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是==双亲委派模式==,I即把请求交由父类处理,它是一种任务委派模式。

工作原理:

1、如果一个类加载器收到了类加载请求求它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;

2、如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;

3、如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。

优点:避免了类的重复加载 保护程序安全,防止核心API被恶意篡改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇呜哦~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值