JVM 50道面试题和答案.docx
需积分: 0 124 浏览量
更新于2023-06-14
收藏 29KB DOCX 举报
**JVM内存分配与结构**
在Java中,对象主要在堆内存中分配,数组也是同样。如果对象在方法内部创建且没有逃逸出方法(即只在方法内部使用),那么根据JIT编译器的优化策略,这些对象可能会在栈上分配,以减少堆的压力。JVM内存分为以下几个区域:
1. **程序计数器(PC Register)**:每个线程都有自己的程序计数器,用于记录当前线程所执行的字节码指令地址。
2. **Java虚拟机栈(Java Virtual Machine Stacks)**:每个线程都拥有一个独立的虚拟机栈,用于存放栈帧,每个栈帧对应一个方法的调用。栈帧包含了局部变量表、操作数栈、动态连接、返回地址等信息。
3. **堆(Heap)**:Java对象的主要存储区域,进行垃圾收集的主要区域。JDK1.8以前,字符串常量池位于永久代,之后移到堆中。
4. **方法区(Method Area)**:存储类信息、常量、静态变量等,JDK8以前是永久代,之后是元空间(Metaspace)。元空间直接使用本地内存分配,不设置固定大小,避免了内存溢出问题。
5. **运行时常量池(Run-Time Constant Pool)**:方法区的一部分,包含类中constant_pool的内容,如字符串常量、符号引用等。
6. **本地方法栈(Native Method Stacks)**:为Java虚拟机执行native方法服务。
**JVM内存模型**
JVM内存模型定义了一种统一的模型,将不同硬件和操作系统的内存访问差异抽象化。它分为两个主要部分:主内存(Main Memory)和工作内存(Thread Local Allocation Buffer, TLAB)。线程之间通过主内存交换信息,线程无法直接访问主内存,而是通过工作内存进行操作。工作内存中包含了线程的局部变量表、操作数栈、动态连接、返回地址等。
**垃圾收集与可达性分析**
JVM使用可达性分析算法来确定垃圾对象,通过GC Roots(包括虚拟机栈、方法区、本地方法栈等中的引用)向下搜索引用链。如果一个对象无法与任何GC Root建立联系,就被认为是不可达的,进而被视为垃圾。软引用和弱引用会影响对象的回收时机,软引用在内存不足时会被回收,弱引用在每次垃圾收集时都会被回收。虚引用主要用于跟踪对象的回收活动,自身不会阻止对象的回收。
**JVM参数查看与调优**
查看JVM参数的默认值可以通过以下方式:
1. `jps -v`:列出JVM进程及其指定的参数。
2. 使用`-XX:+PrintFlagsFinal`启动JVM,可以看到所有参数的默认值。
3. `jinfo`命令可以实时查看和调整虚拟机参数。
JVM调优涉及到很多方面,包括内存分配、垃圾收集器的选择、线程池设置、编译优化等,需要根据应用的特点和性能需求进行细致的调整。
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
栾还是恋
- 粉丝: 38
- 资源: 5321
最新资源
- OPCDA转OPCUA转换工具:实现DA Server数据双向转换至UA Server的软件解决方案,OPCDA转OPCUA转换工具:实现DA Server数据与UA Server双向传输功能,OPC
- 基于Simulink的四永磁同步电机偏差耦合转速同步控制仿真模型研究与应用,Simulink上的四永磁同步电机偏差耦合转速同步控制仿真模型研究,simulink上搭建的四永磁同步电机偏差耦合转速同步控
- 纯电动汽车Simulink仿真模型建模详解:步骤指南与操作技巧,附带完整模型及参考设计能力的提升,纯电动汽车Simulink仿真模型建模详解:步骤指南与附带模型,助力提升建模能力与思路借鉴,纯电动汽车
- 永磁同步电机PMSM谐波注入降低转矩脉动技术研究与实践:文献复现及优化控制策略,永磁同步电机PMSM的5-7次谐波注入与转矩脉动抑制研究:文献复现与实践探讨,永磁同步电机PMSM电机5 -7次谐波注入
- Xilinx FPGA千兆以太网通信与DDR内存读写测试工程代码:基于KCU105与KC705平台的10/100/1000Mbps LWIP协议实现及DDR4内存读写性能测试,基于KCU105和KC7
- 基于Python和HTML的学生就业画像分析后端设计源码
- Dugoff轮胎模型的验证与对比分析:基于MATLAB 2018与CarSim 2020.0的仿真研究,MATLAB CarSim中的Dugoff轮胎模型仿真验证:高附路面不同速度下模型与真实情况对比
- DS18B20温度传感器.zip 51单片机代码
- 基于Java语言的艾斯医药系统自动搜索功能设计源码
- 基于Vue框架的留学项目管理与管理系统设计源码
- 基于HTML+CSS的纯静态豆瓣首页开源设计源码
- 基于C++ Primer Plus的深入C++教材学习与源码分析
- 基于HTML+CSS+JavaScript的临沂市新能源协会前端页面设计源码
- 断网急救箱python源码
- 基于Python与多语言结合的科研文献工作流设计源码
- 51单片机LED从左到右流水灯实验详解-STC89C52RC晶振与Keil编程入门