当前位置: 首页 > news >正文

Java面试题:内存管理、类加载机制、对象生命周期及性能优化

1. 说一下 JVM 的主要组成部分及其作用?

image.png

JVM包含两个子系统和两个组件:Class loader(类装载)、Execution engine(执行引擎)、Runtime data area(运行时数据区)、Native Interface(本地接口)。

  • Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)装载class文件到Runtime data area中的method area。
  • Execution engine(执行引擎):执行classes中的指令。
  • Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。
  • Runtime data area(运行时数据区域):就是我们常说的JVM的内存。

作用:

通过编译器把 Java 代码转换成字节码,类加载器(ClassLoader)将字节码加载到内存中,放在运行时数据区(Runtime data area)的方法区内。字节码文件是一套指令集规范,不能直接交给底层操作系统执行,需要Execution Engine(执行引擎)将字节码翻译成底层系统指令,交由CPU执行。过程中需要调用Native Interface(本地接口)来实现整个程序的功能。

Java程序运行机制详细说明:

  1. 编写Java源代码,源文件后缀为.java;
  2. 利用编译器(javac命令)将源代码编译成字节码文件,后缀为.class;
  3. 运行字节码的工作由解释器(java命令)完成。

在JVM中,类的加载指的是将类的.class文件中的二进制数据读入内存,放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。

2. 说一下堆栈的区别?

物理地址

  • :物理地址分配对对象是不连续的,性能较慢,GC时需要考虑不连续分配。
  • :使用的是数据结构中的栈,先进后出,物理地址分配是连续的,性能较快。

16601958870783010274ffy

内存分配

http://www.lryc.cn/news/384633.html

相关文章:

  • 什么是 Payment Request API?
  • 【杂记-浅谈EBGP外部边界网关协议、IBGP内部边界网关协议】
  • 基于Java的宠物领养管理系统【附源码】
  • Grafana 对接 Zabbix 数据源API错误
  • Spring Boot与Apache Kafka的深度集成
  • 07 Pytoch Module
  • Isaac Sim 9 物理(1)
  • vue vue.config.js webpack 加密混淆代码
  • Talk|北京大学PKU-DAIR余昭辰:从多模态理解到生成 - 从LLM到Diffusion Model
  • 数据中台高频面试题及参考答案(持续更新)
  • 腾讯云CVM,CentOS8系统下部署Java-Web项目步骤详解
  • Jenkins 创建流水线任务
  • 单总线协议耗材认证加密芯片ALPU-P
  • 【TS】TypeScript 有哪些类型
  • ErrnoException: open failed: EPERM (Operation not permitted)
  • 乘法与位运算
  • HTML(20)——定位
  • 精通scikit-learn:模型持久化与选择的最佳实践
  • JMeter安装与使用
  • ubuntu 20.04 访问csdn报错 Secure connection failed
  • Linux下如何设置可执行文件和库文件的环境变量?
  • gsap动画库对threejs模型的应用
  • 网管工作实践_02_IP/MAC地址管理工具
  • MySQL【触发器、存储过程、函数、范式】
  • Shopee API接口——获取商家店铺商品列表
  • linux基础知识14
  • Qt开发入门与环境搭建(基础篇)
  • CentOS7环境Maxwell的安装及使用
  • python环境变量
  • 用进程和线程完成TCP进行通信操作及广播和组播的通信