JVM进阶调优【2】面试:JVM内存区域怎么划分,分别有什么用?

你知道哪些JVM性能调优?77道JVM系列面试题总结,彻底弄透JVM各种问题。 最新2020整理收集的一线互联网公司面试真题(都整理成文档),有很多干货,包含netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,我感觉在面试这块讲的非常清楚:获取面试资料只需:点击这里领取!!! 暗号:优快云 1、java中会存在内存泄漏吗,请简单描述。 会。自己实现堆载的数据结构时有可能会出现内存泄露。 2、64 位 JVM 中,int 的长度是多数? Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在. 阅读详情

 一、类加载过程阶段

1.1 加载验证

类加载器加载二进制.class文件到内存后,开始验证.class文件是否符合JVM规范,检查格式、语义等是否符合规正确。比如.class文件生成后,被别人直接随便修改编辑,这就会被发现不规范不安全。

1.2 准备

验证之后,开始给.class的进行分配内存空间(今天重点讲如何分配内存),以及给一个初始默认值。比如加载了这个Demo001ClassLoader类,在准备阶段就需要给Demo001ClassLoader分配内存(放在哪?看完本文就知道),以及要给里面的paramA变量分配内存,并给它赋一个默认0值。

public class Demo001ClassLoader {
    private static int paramA = getParamA();
    private static List<String> strList = new ArrayList<>();
    static {
        strList.add("a");
    }
    public static int getParamA() {
        User user = new User("aa");
        return user.getAge();
    }
}

 

1.3 解析

我们日常代码开发,引用方法、变量,都是通过方法名、变量名去引用。这种引用就是符号引用。在解析阶段,会把符合引用解析成直接引用,这样jvm就可以直接执行 。

1.4 初始化

这个很重要。在阶段2【准备】,仅仅是给paramA分配空间并赋默认值,初始化就是赋予具体值。这时候初始化,就是开始调用getParamA()方法,发现还有加载User类,然后获取对应值,赋值给paramA变量。以及执行static修饰的代码块。

二、内存区域划分

2.1 元数据区MetaSpace

这个区,主要放类加载器加载进来的.class文件。在JDK8以前,这个也叫方法区。这个元数据区不占用堆内存,这个区是直接使用系统内存。

2.2 程序计数器(多线程之间独自占有)

.class文件也是经过编译后的一行行代码指令,每个线程执行代码指令时候,通过程序计数器,记录当前执行字节码指令位置。

2.3 虚拟机栈(多线程之间独自占有)

每个线程都有自己的一个虚拟机栈,当访问一个方法时,就给这个方法创建一个栈帧。用来存放方法里的局部变量、方法出口、动态链接等,主要用来存放方法里的局部变量。比如线程执行了ABC 三个方法,A()->B(),B 方法里有个局部变量b->C()。分别创建了ABC栈帧入栈,执行完C方法后,C帧出栈,然后B方法帧的局部变量b出栈,然后B方法帧出栈,最后A方法帧从虚拟机栈出栈。

以及方法里又调用其他方法,这时候将方法的符号引用,变成直接引用==也叫做动态链接。

2.4 堆内存-核心的核心(多线程共享读写堆空间数据)

堆内存就是存放类对象实例,GC回收就是在这个区域进行。在三的虚拟机栈,如果栈里有局部变量,属于八大基本类型数据int、double之类,直接存值,如果是实例对象,局部变量只是存地址引用。局部变量对象的数据就会存在堆内存中。

在堆内存里,年轻代Young和老年代Old。年轻代分Eden区、S1区、S2区共三个区。默认各自占年轻代的8:1:1空间。

新对象都尝试存放在年轻代的Eden区,如果Eden区放不下,就触发YGC。

2.5 本地方法栈

和虚拟机栈有点类似,用来执行native方法,但不是native方法都不是java实现,主要是C++实现。native方法可以直接访问操作系统API、硬件设备,本地方法栈为这些方法的执行提供了环境。

据此,阅读了系列1和本文,可以轻松回答JVM的类加载器种类作用、双亲委派机制以及其优缺点,还有如何打破双亲委派机制。还有类加载过程做了什么,以及执行main方法后,main线程的虚拟机栈如何对方法栈帧入栈出栈,以及局部变量,.class文件,类变量,实例对象存储,都一清二楚。

关于JVM虚拟机调优的20道高级面试题 JVM内存模型是Java虚拟机在执行Java程序时,对内存进行逻辑划分的一种抽象模型。程序计数器:每个线程都有一个独立的程序计数器,用于存储下一条要执行的指令的地址。这样当线程恢复执行时,可以知道从哪里开始执行。虚拟机栈:每个线程也有一个私有的虚拟机栈,用于存储局部变量、操作数栈、动态链接和方法出口等信息。这个栈在方法调用和返回时扮演着重要角色。本地方法栈:与虚拟机栈类似,本地方法栈主要用于支持本地方法的调用。堆:堆是JVM内存模型中最大的一块内存区域,主要用于存储对象实例。 阅读详情

相关推荐

JVM调优方法论

这可能是调优工作中占据更大比重的内容。我们不应迷失方向,只为了调优而调优,只为了调整参数而调整参数。最终,我们需要回归到业务本质,这才是最核心的内容。我们也需要更深入地了解JVM的相关参数,以更好地支撑业务需求的实现。

qq_57756904的博客 1445

JVM进阶调优系列(2)字节面试:JVM内存区域怎么划分,分别有什么用?

详细分析JVM内存划分,以及各个内存区域的作用。并通过实际案例剖析类加载过程,以及类的数据在内存存放细节。

拉丁解牛技术专栏 1068

【五斗米】JVM调优

JVM是Java虚拟机的简称,它是Java跨平台运行的核心组件。JVM通过将字节码文件(.class)转换为机器码实现"一次编译,到处运行"。其组成包括类加载系统、执行引擎、运行时数据区和本地接口。内存区域分为线程共享的堆(存储对象)和方法区(类信息),以及线程私有的程序计数器、虚拟机栈和本地方法栈。JVM采用分代垃圾回收机制:新生代使用复制算法,老年代采用标记-清除/整理算法。三色标记算法优化了可达性分析过程,减少STW时间。JVM调优主要涉及堆内存设置(-Xms/-Xmx)、选择合适

m0_64210833的博客 1838

面试官:怎么做JDK8的内存调优?

看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题。擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说:

万猫学社 7万+

硬件-电源-智能保护:eFuse选型与实战设计全攻略

本文深入解析eFuse在硬件电源设计中的关键作用与实战选型技巧。作为智能保护器件,eFuse能提供毫安级精度的过流保护、多重故障防护和智能恢复功能,比传统保险丝快1000倍以上。文章详细介绍了eFuse的工作原理、五大选型维度和PCB布局要点,帮助工程师有效预防电源异常导致的硬件损坏,适用于AI服务器、工业控制等场景。

weixin_30879169的博客 201

5分钟搞定SNMP工具安装:从Linux到Windows的snmpwalk/snmpget全攻略

本文提供了SNMP工具(snmpwalk/snmpget)在Linux和Windows系统上的快速安装与使用指南,涵盖从基础安装到高阶应用的全面解析。通过详细的命令示例和故障排查技巧,帮助用户快速掌握网络设备监控与诊断的核心技能,提升运维效率。

weixin_29248313的博客 557

面试必问系列 | 工作很多年了,还不会JVM性能调优?那你就Out了,快点收藏冰河写的这篇JVM性能调优文章吧

对于工作3年左右的Java程序员来说,在面试大厂的过程中,面试官可能不会太关注你做了多少个项目、你的CRUD水平如何。更多的是关注你对某项技术点的理解深度,所以说,工作3年左右的小伙伴一定要把自己的重心放到技术的深度上来。

冰河的专栏 2592

Python之美——Python2与Python3多版本共存

Python多版本共存的方法Python2、Python3共存的方法python2下载及环境变量配置第一步、打开Python官网,下载Python2第二步、python2环境变量配置测试结果 Python2、Python3共存的方法 方法如下: 1.先确保不同版本解释器的python.exe所在的路径在环境变量中 2.拷贝各自的python.exe并重命名即可 步骤(理解不了下面有图示): 1、首先你需要将不同的python版本安装,且都已经将跟版本的环境变量配置好了,python3和2的下载方式

chenchen5152的博客 3946

jvm调优面试怎么答?

一.jvm分为年轻代,年老代,持久代1.年轻代:年轻代主要存放新创建的对象,垃圾回收会比较频繁。(稍微讲细一点就是即可,年轻代分成Eden Space和Suvivor Space。当对象在堆创建时,将进入年轻代的Eden Space。垃圾回收器进行垃圾回收时,扫描Eden Space,如果对象仍然存活,则复制到Suvivor Space。) 2.年老代:年老代主要存放JVM认为生命周期比较长的对象...

changji9461的博客 1万+

Unity3D Pico VR 手势交互实战:基于MRTK3实现抓握与射线控制

本文针对Pico VR原生手势交互功能不足的问题,提供了基于MRTK3实现高级手势交互的实战解决方案。通过将MRTK3成熟的交互框架与Pico的手势追踪能力相结合,详细讲解了从环境配置、SDK导入、核心适配到真机调试的全流程,帮助开发者高效实现抓握与射线控制等复杂交互,有效提升Pico VR应用的开发效率与体验。

weixin_29011667的博客 391

Ubuntu22.04安装ros(一键搞定)

然后发现可以一键安装,话不多说,直接终端输入如下指令。回车之后系统会自动安装ros。

m0_47313541的博客 7416

【Java面试系列】JVM与调优面试题

目录 一、JVM 内存区域划分 1.程序计数器(线程私有) 二、JVM 执行子系统 1.Class 类文件结构 三.垃圾回收器和内存分配策略 3.基本垃圾回收算法 四、编写高效优雅 Java 程序 1.面向对象 五、性能优化 1.常用的性能评价/测试指标 六.JVM详解篇 Java虚拟机(JVM)原理篇 ...

Yangy的博客 1万+

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

京东面试:如何进行JVM调优?

面试题大全:www.javacn.siteJVM 调优是一个很大的话题,在回答“如何进行 JVM 调优?”之前,首先我们要回答一个更为关键的问题,那就是,我们为什么要进行 JVM 调优?只有知道了为什么要进行 JVM 调优之后,你才能准确的回答出来如何进行 JVM 调优?要进行 JVM 调优无非就是以下两种情况:目标驱动型的 JVM 调优,如,我们是为了最短的停顿时间所以要进行 JVM 调优,或者...

磊哥聊Java 1050

关闭搜狗输入法右下角广告的解决方案

本文主要介绍了关闭搜狗输入法右下角广告的解决方案,希望能对使用搜狗输入法的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

yolo 图像检测、关键点检测单摄像头测量物体尺寸长度大小

new_distance/real_size (待求物体像素距离与实际距离比值)= distance / metric_length (参照物像素距离与实际距离比值)然后运行size_demo进行要测量的物体进行关节点检测距离;metric_length是上面耳机选取的两个点的实际物理距离,大概6cm;这里用的windows。通过关键点检测识别物体关键点的像素距离,然后参考比例尺计算实际距离。2)关键点算法这里用的现有的进行测试,实际场景需要自己训练。这里拿这模型推理出的关键点坐标进行后续长度计算。

weixin_42357472的博客 2528

面试(01)————JVM篇,最大白话的一集,常见概念的讲解以及GC监控调优等等

说起JVM组成是什么,我们的第一印象就是堆、栈、方法区、程序计数器等等,但是这样是不对的,真实的JVM的组成由和组成。而我们之前的回答只是片面的,所以需要留意一下,防止面试被问到。其中最重要的部分就是内存区域这部分,也是面试问的最多的地方,后续的调优也是针对内存区域进行调优的。

m0_73376570的博客 2298

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jvm性能调优 - 02JVM中内存区域

文章目录Pre什么是JVM的内存区域划分?存放类的方法区 Pre 上一篇文章我们聊了一下JVM类加载这块的机制,先简单回顾一下。 大家需要搞明白的是,在什么情况下会触发类的加载?加载之后的验证、准备和解析分别是干什么的? 尤为重要的是准备阶段和初始化阶段,是如何为类分配内存空间的?然后类加载器的规则是什么? 现在互联网大厂面试一般都必定会考核JVM相关的知识积累, 所以在了解完了JVM的类加载机制之后,先一起来看看JVM的内存区域划分,这个基本上是互联网公司面试必问。 什么是JVM的内存区域划分?

小工匠 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

面试官问我JVM调优,我忍不住了,哈哈哈哈

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解![外链图片转存中…(img-pGSZudPW-1714226464068)]本文已被。

pCITv1C的博客 899

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java高级面试:JVM性能调优与线上问题排查实战

本次面试围绕JVM性能调优展开,候选人对JVM的基础知识、调优方法和线上问题排查展现了丰富的实战经验。系统性思维和解决问题的能力令人印象深刻。希望这篇文章能为Java开发者提供有价值的参考。

南客先生的博客 766

JVM篇4:详解JVM调优与经典案例分析

JVM调优介绍以及案例分析

m0_59624833的博客 1576

Java面试必备:JVM内存区域的划分

Java虚拟机(JVM)是Java程序运行的核心环境,它负责管理程序的内存、执行字节码以及处理垃圾回收等任务。理解JVM的内存区域划分对于编写高效、稳定的Java程序至关重要。本文将详细介绍JVM的内存区域划分,并通过流程图帮助读者更好地理解这些概念。

qq_58299462的博客 935

【对线面试官】聊聊JVM调优经验?

其实,!如果你的 JVM 出现了严重的 GC 压力,,而不是直接上手去调整 JVM 参数。尽管如此,面试时常常会有面试官问起 JVM 调优。那么,他们真的在问 JVM 调优的经验吗?

会飞的架狗师的博客 1010

JVM调优面试题分类整理

本文系统整理了JVM调优相关面试题,包含六大部分内容:1)内存模型与垃圾回收基础,解释JVM内存结构及垃圾回收原理;2)垃圾回收算法,比较标记清除、复制等算法特点;3)垃圾收集器,分析Serial、CMS、G1等收集器特性;4)内存问题诊断,介绍内存泄漏和OOM排查方法;5)性能调优实战步骤;6)高级调优技巧如减少GC停顿等。文章采用对比表格和形象比喻,帮助理解不同场景下的JVM优化策略,适合面试准备和实际调优参考。

weixin_39956506的博客 1145

JVM面试真题,干货!

在JVM(Java虚拟机)面试中,可能会遇到多种类型的问题,这些问题涵盖了JVM的基本概念、内存管理、垃圾回收(GC)、性能调优等多个方面。

u012156076的博客 1077

面试官:整天说JVM内存调优,调优的内存是哪一块区域?

作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发。但是一旦发生内存泄漏或者内存溢出,如果对Java内存结构不清楚,那将会是一件非常麻烦的事情!本文笔者将为大家详解Java内存结构。

2301_78976656的博客 1056
上一篇: JVM进阶调优【1】类加载器原理一文讲透
下一篇: 【MySQL】手滑删库别急着跑路,恢复数据轻松拿捏!
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值