面试:JVM内存结构

embedded/2024/12/23 6:33:29/

一、Java代码的运行步骤

一段Java代码先会被反编译为Java字节码,当执行java命令时,JVM虚拟机会被创建出来,并会创建一个main主线程来执行主方法。

二、JVM的内存结构有哪些?

1、方法区:(线程共享)

方法区用于读取类的原始信息(类的名字、继承关系、成员变量、引用的其他类的名字、类的方法代码)内存中。例如Main、Student类

2、堆(线程共享)

新建的对象(实例)会存储在堆中。

3、程序计数器:(线程私有)

用于记录代码执行到了第几行。

4、虚拟机栈:(线程私有)

用于存储局部变量方法参数以及普通的java方法。

5、本地方法栈:(线程私有)

用于存储java本地方法。使用本地方法需要通过本地接口去调用本地库(由操作系统提供的一些功能)

6、注意: 

在我们常用的Oracle虚拟机中,java本地方法(java代码不能自己实现,要借助操作系统的函数)普通的java方法(java代码自己实现的方法)都是存储在虚拟机栈中的,本地方法栈并没有被实现。

三、执行引擎

1、垃圾回收(GC)

当变量没有被引用时,会被认定为垃圾,当虚拟机内存不足时被回收。

2、解释器

将字节码解释为机器码

3、即时编译器(JIT)

对调用频繁的代码,jit会将其的机器码缓存在内存中,效率成倍提高

四、哪些地方会产生内存溢出

1、出现OutOfMemoryError的情况

  • 堆内存耗尽–对象越来越多,又一直在使用,不能被垃圾回收
  • 方法区内存耗尽–加载的类越来越多,很多框架都会在运行期间动态产生新的类
  • 虚拟机栈累积–每个线程最多会占用1M内存,线程个数越来越多,而又长时间运行不销毁时

2、出现StackOverflowError的区域

虚拟机栈内部–方法调用次数过多

不会出现内存溢出的区域–程序计数器
 


http://www.ppmy.cn/embedded/17026.html

相关文章

opengles在车载360环视avm系统中的应用简介

360环视是辅助驾驶系统的一个技术点,通过鱼眼相机模型标定,图像拼接,鸟瞰图生成,3d渲染等手段把车体周围图像经过3D渲染后,生成2D鸟瞰图和3D环视图,在中控屏幕上显示,用于辅助倒车等。其具体的技…

【C++ STL序列容器】list 双向链表

文章目录 【 1. 基本原理 】【 2. list 的创建 】2.1 创建1个空的 list2.2 创建一个包含 n 个元素的 list(默认值)2.3 创建一个包含 n 个元素的 list(赋初值)2.4 通过1个 list 初始化另一个 list2.5 拷贝其他类型容器的指定元素创…

抖音智能运营系统源码

这是一个一站式服务的抖音智能运营系统,旨在提升内容创作者和营销人员的工作效率。它是一个综合性的在线服务平台,专为抖音内容创作者和营销人员设计。系统基于高性能、可扩展性强的ThinkPHP框架,整合了视频处理、数据分析、文案生成与配音等…

react 封装请求axios,直接调用即可

概要 我们在开发项目的时候,常常会遇到接口请求的问题的,若我们不进行接口的统一管理,代码开发不仅多而且很麻烦容易出错,也不利于项目的维护。下面我们一下学习下react项目中将如何封装请求,也从另一个方面中少写一些…

pip下载包opencv出错(报错failed building wheel for opencv-python解决方法)

文章目录 1 报错2 原因3 解决方法参考 1 报错 ERROR: Could not build wheels for opencv-python, which is required to install pypr2 原因 版本不兼容的问题,当使用pip install opencv-python命令安装的是最新版本,当前python版本不支持。需要安装当前版本pyth…

WPF2022终结版系列课程笔记 1 WPF 基本布局

本笔记为B站 微软系列技术教程 WPF项目实战合集(2022终结版) 项目记录 WPF 基本布局 WPF布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 WPF布局容器 StackPanel: 水平或垂直排列元素、Orientation属性分别: Hor…

03-JAVA设计模式-观察者模式

观察者模式 什么是观察者模式 Java中的观察者模式是一种常见的设计模式,它允许对象(观察者)订阅另一个对象(被观察者)的状态变化,并在状态变化时自动得到通知。 核心: 观察者模式主要用于1&a…

【Qt常用控件】—— 多元素控件

目录 1.1 List Widget 1.2 Table Widget 1.3 Tree Widget 1.4 小结 Qt 中提供的多元素控件有: QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例: QTableView 是基于…