JVM从概述到调优图文详解,含思维脑图深度剖析!

解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用 本文探讨 AI 与大数据技术。介绍 DeepSeek 模型潜力及蓝耘平台对其部署助力,展示多领域应用成效。阐述 Java 大数据在金融监管与政务服务应用,分析多种编程语言作用,展望技术融合创新前景,强调其在各行业的变革力量。 阅读详情

JVM概述

JVM 是一种用于计算机设备的规范,它是一个虚构的计算机的软件实现,简单的说,JVM 是运行 byte code 字节码程序的一个容器。

它有一个解释器组件,可以实现 JAVA 字节码和计算机操作系统之间的通信,java程序只需要在JVM 上一次编译,多出运行,因此JAVA具有跨平台性。

内存结构

  • 方法区(常量池、静态变量、构造函数、类数据)
  • 堆(对象、类实例、GC的主要区域)

    • 新生区(Minor GC 、Full GC清理无用数据)

      *   伊甸园(对象创建)
      *   幸存 0 区
      *   幸存 1 区
    • 老年代(对象的声明周期到老年代结束)(Full GC)
    • 永久区(jdk 1.8 以后被元空间代替)(Major GC)
  • 程序计数器(记录每个运行线程的内存地址)
  • 虚拟机栈(每个方法创建都会创建一个栈,栈内的数据都是临时的)
  • 本地方法栈
  • 直接内存

堆中的 GC 回收过程

对象会在 Eden(伊甸园)分配创建,当 Eden(伊甸园)没有足够空间时将发起一次 Minor GC(垃圾清理),当 Eden 执行 Minor GC 后还不足以为对象分配空间,则大的对象直接进入老年代,可以用参数设置大对象直接进入老年代,避免频繁 Minor GC 。如果对象在 Eden 创建,发生 Minor GC 后仍然存活,且能被 Survivor 幸存去容纳,年龄加 1, 达到一定年龄进入老年代,默认为 15。发生 Mrinor GC之前先检查老年代最大可用连续空间是否大于新生代所有对象总空间,如果大于,说明 Minor GC 安全;否则会判断是否被担保失败,如果担保失败了,判断老年代最大连续空间是否大于历次晋升到老年代对象的平均大小,如果大于则尝试 Minor GC ,否则就执行 Full GC 进行对象回收,如果 Full GC 执行完毕后,对象仍然无法被创建,则直接抛出内存溢出的异常(java.lang.OutOfMemoryError)。

如何改变对象对象进入老年代的最大值?

通过修改-XX:PretenureSizeThreshold参数来设置进入老年代的对象年龄。这样也避免在 Eden(伊甸园)区和两个 Survivor 之间发生大量的内存复制。(默认值为 15)

GC如何判断对象是否改被回收

垃圾收集的算法

都有那些垃圾回收器

内存泄漏(不再使用的对象的内存不能被GC回收)

内存泄漏的例子:

单例模式:

不正确使用单例模式是引起内存泄漏的一个常见问题,单例对象在初始化后将在JVM的整个生命周期中存在(以静态变量的方式)。如果单例对象持有外部的引用,那么这个对象将不能被JVM正常回收,导致内存泄漏。所以需要注意,尽量不要在单例中持有大对象。

各种连接:

比如数据库连接、socket连接、文件流等,除非其显式的调用其close()方法将连接关闭,否则是不会自动被垃圾 回收的。

静态集合类:

我们循环申请Object对象,并将所申请的对象放入一个Vector中。如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。

如果对象加入到Vector后,还必须从Vector中删除,最简单的方法就是将Vector对象设置为null。

Static Vector v = new Vector(10); for (int i = 0; i < 100; i++) {     Object o = new Object();     v.add(o);     o = null; }

事件监听器:

AWT的事件处理机制是一种委派式事件处理方式:普通组件(事件源)将整个事件处理委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。

比如常用的监听器有ActionListener、KeyListener、MouseListener、MouseMotionListener(专门处理鼠标运动事件的,比如鼠标的移动和拖动)

如果在释放对象的时候没有记得删除这些监听器,会增加内存泄露的机会。

import java.awt.*; import java.awt.event.*; public class TestButton { public static void main(String args[]) {     Frame f = new Frame("Test");     Button b = new Button("Press Me!");     b.addActionListener(new ButtonHandler()); /*注册事件监听器*/     f.setLayout(new FlowLayout()); //设置布局管理器     f.add(b);     f.setSize(200,100);     f.setVisible(true); } } //实现接口ActionListener才能做事件ActionEvent的处理者 class ButtonHandler implements ActionListener {    public void actionPerformed(ActionEvent e)   {      System.out.println("Action occurred");   } }

调优

JVM 思维导图

最后

这些JVM篇章已经全部整理成一套完整且体系的pdf文档,无论是思维脑图、学习笔记还是面试考点全整理好了,实际内容还有很多,就不一一展示,若你也需要这一套学习资料。

关注我的公众号:Java斗帝,回复666领取

 

推荐阅读

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我懂了

字节跳动总结的设计模式 PDF 火了,完整版开放下载

刷Github时发现了一本阿里大神的算法笔记!标星70.5K

程序员50W年薪的知识体系与成长路线。

月薪在30K以下的Java程序员,可能听不懂这个项目;

字节跳动总结的设计模式 PDF 火了,完整版开放分享

关于【暴力递归算法】你所不知道的思路

开辟鸿蒙,谁做系统,聊聊华为微内核

 

看完三件事❤️

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

关注公众号 『 Java斗帝 』,不定期分享原创知识。

同时可以期待后续文章ing🚀

❤️三万字《图解 -JVM调优系列》带你从实战原理上重新认识堆区【建议收藏】❗❗❗ vx公众号:码工是小希 关注选择“星标”,重磅干货每日 送达! 【如果你觉得文章对你有帮助,欢迎关注,点赞,留言哦】 礼多人不怪嘛,试着回复下:【路线】,【秘籍】,【实战】,【简历】; 一 ????堆的核心概念 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调 阅读详情

相关推荐

HTML+CSS实战笔记:从盒模型到Flexbox/Grid的布局核心解析

在前端开发中,HTML与CSS是构建网页的基石,理解其核心原理是掌握现代Web技术的关键。HTML负责定义文档的结构与语义,而CSS则控制着页面的表现与布局。其中,盒模型是CSS布局的基石,它定义了元素内容、内边距、边框和外边距的计算方式,直接影响着页面元素的尺寸与定位。基于盒模型,现代CSS布局方案如Flexbox和Grid提供了强大的一维与二维布局能力,能够高效实现复杂的页面结构与响应式设计。Flexbox擅长处理单行或单列的项目排列与对齐,而Grid则为整体页面布局提供了精细的网格控制。这些技术共同构

456

JVM

网址: https://www.jianshu.com/p/99772ad092d3 https://zhuanlan.zhihu.com/p/34426768 https://blog.youkuaiyun.com/qq_41701956/article/details/81664921 JVM 目录 JVM 一、JVM概述 二、内存结构 三、堆中的 GC 回收过程 如何改变对象对象进入老年代的最大值? 四、GC如何判断对象是否改被回收 五、垃圾收集的算法 六、都有那些垃圾回收器..

weixin_43626694的博客 1561

JVM思维导图(包含所有JVM知识)

JVM整体结构内存模型(对象的创建,指针压缩,对象大小,对象内存),垃圾收集器,垃圾收集器算法、内存调优(调优工具),垃圾收集,内存回收(算法),类加载机制(类加载过程,双亲委派),一图学完JVM所有的知识点

JVM知识点思维导图(详细)

这是自己看JVM学习视频,整理的JVM思维导图,以下是截止目前写博客时整理的知识点,后续会持续更新 更新地址(gitee):https://gitee.com/smile-coding/study-xmind-or-note/tree/master/xmind/jvm 如果对你有帮助,给个小心心支持一下哈(star) ...

笑笑是一个码农 1538

基于ARDUINIO的5路红外循迹小车

基于ARDUINIO的5路红外循迹小车 新手抄袭了很多大神的代码。这里表示感谢。 #define STOP 0 #define FORWARD 1 #define BACKWARD 2 #define STURNLEFT 3 #define STURNRIGHT 4 #define TURNLEFT 5 #define TURNRIGHT 6 #define TURNRIGHT90 7 #define TURNLEFT90 8 int leftA_PIN = A0; int

weixin_48214416的博客 4381

保姆级教程:用ROS2 Humble + Gazebo Classic 从零搭建一个能键盘控制的差分AGV模型

本文提供了一份详细的ROS2 Humble与Gazebo Classic教程,指导用户从零开始搭建一个键盘控制的差分AGV模型。内容涵盖环境配置、Xacro文件设计、Gazebo仿真集成以及键盘控制实现,特别针对常见问题提供解决方案,帮助开发者快速掌握ROS2机器人仿真技术。

weixin_30387423的博客 168

BAT面试专题:深入理解JVM——图解JVM调优

**JVM: **java虚拟机,java的核心与基础,用来运行java的程序1、java程序的运行过程java源文件被编译器编译成.class文件class文件被类加载器加载至内存//--------类加载器:将.class文件加载至内存并且生成相应的class对象执行2、JVM程序执行的顺序加载.class文件>>>>管理分配内存>>>>执行垃圾收集java语言的特点就是平台的无关性:java虚拟机在执行字节码时,把字节码解释成具体平台的机器指令,这也就是java能够“一次编译,到处运行”的原因JVM调

mt77666的博客 280

STM32H7+LAN8720A之ETH与LWIP配置问题(End)

开篇介绍 由于项目中需要使用到STM32H7系列的芯片,且该系列无法移植ST的标准库,只能使用ST的HAL库,通过STM32Cube生成HAL库的基本代码。在项目开发中需要使用到STM32板载的ETH口,在简化的四层模型中充当着数据链路层的角色,我们只需添加PHY并配置好IP,即可实现基本的TCP主从机通信、UDP通信等等。 一、激光雷达3i-T1 由于使用了一款只具有网口通信的单线激光雷达,其具有TCP和UDP方式的通信方式,为了避免进行TCP中的socket报文解析和繁琐的通信握手过程,我们首先将雷达配

weixin_42024702的博客 1万+

从腾讯T3-3程序员手上获得的Java架构进阶PDF文档,图文并茂,真香

但是整理成了一份详细的31份PDF文档:Linux+JVM+ Spring+MySQL+Mybatis+设计模式+分布式+微服务+多线程+ActiveMQ+Zookeeper+Dubbo+SpringCloud 微服务+Nginx+SpringBoot+NIO+线程池原理分析&锁的深度化,有需要的朋友可以在文末获取免费领取方式!比如,面试后端开发岗位时,面试官不仅考察基础能力,更会重点考察高并发、分布式等架构相关的技术背后的思考逻辑,比如:分布式,数据库,微服务,负载均衡,Redis,RPC等。

m0_69804655的博客 247

OpenPose 论文理解

OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation paper: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields link: OpenPose paper...

JustForYou的博客 2万+

超分算法 SwinIR: Image Restoration Using Swin Transformer

这篇文章结构比较简单,如果看过Swin-Transformer的话就没什么难点了。作者引入Swin-T结构应用于低级视觉任务,包括图像超分辨率重建、图像去噪、图像压缩伪影去除。网络由一个浅层特征提取模块、深层特征提取模块、重建模块构成。重建模块对不同的任务使用不同的结构。浅层特征提取就是一个3×3的卷积层。深层特征提取是k个RSTB块和一个卷积层构成。RSTB(Res- SwinIR: Image Restoration Using Swin Transformer[ICCV 2021]Abstract1.

qq_45122568的博客 1万+

深度剖析 G1 垃圾收集器:从 Region 分区架构到可预测停顿的演进之道

本文深度解析了 Java G1 垃圾收集器的核心架构与运行原理。文章首先详细探讨了基于 Region 的离散化堆内存布局及其与传统物理分代的区别;随后重点论述了 Remembered Set (RSet) 如何通过写屏障技术解决跨代引用扫描难题,并剖析了 SATB 算法在并发标记阶段的应用。文章进一步揭秘了 G1 实现可预测停顿时间的数学统计模型。针对生产环境中的性能瓶颈,本文提供了具体的调优案例,分析了 Full GC 的成因并给出了优化方案,旨在帮助开发者从底层原理到实践应用全面掌握 G1 GC。

等风来 1037

芋道前后端分离项目跳过登录

在此页面中可以看到当在没有获取到token时,如果此页面在白名单中则直接进入,所以我们将刚刚配置在。在此路径下配置需要跳过登录的页面路径,记住path中编辑的名称。根据以上两图可以发现芋道的。将所有需要跳过登录的方法。,否则会提示登录状态过期。至此完成免登录进入页面。

FanZaiYo的博客 5486

从腾讯T3-3大佬手上获得的Java架构进阶PDF文档,图文并茂,真香

但是整理成了一份详细的31份PDF文档:Linux+JVM+ Spring+MySQL+Mybatis+设计模式+分布式+微服务+多线程+ActiveMQ+Zookeeper+Dubbo+SpringCloud 微服务+Nginx+SpringBoot+NIO+线程池原理分析&锁的深度化,有需要的朋友可以在文末获取免费领取方式!比如,面试后端开发岗位时,面试官不仅考察基础能力,更会重点考察高并发、分布式等架构相关的技术背后的思考逻辑,比如:分布式,数据库,微服务,负载均衡,Redis,RPC等。

m0_69804655的博客 147

期权定价模型系列[11]三叉树期权定价[trinomial model ]

三叉树期权定价方法简介

xiaowu1997的博客 1847

如何加快香山处理器Chisel->Verilog编译速度

相比使用默认的scala firrtl complier,使用CIRCT能够将香山代码编译到Verilog的速度提高50%左右。在执行make命令时加上MFC=1,例如make verilog MFC=1或make emu MFC=1。在本地从源码编译CIRCT,在编译完成后将circt/bin路径加入PATH中。使用GraalVM免费版作为JVM编译香山比OpenJDK快10%-20%。我们推荐使用GraalVM代替OpenJDK。使用CIRCT编译香山。

专业技术人员的归宿 862

猛淦,白拿阿里架构纯手撸Spring高级源码手册,啃起来真TM香啊

看到这条消息,我笑了因为我刚参加工作那会和他的想法一样,搬砖两年我才明白,源码非常重要,十场九面问源码,这么和你说吧,不懂源码,你就不了解其底层逻辑和实现原理,这也意味着你只是一个代码的搬运工,在求职市场就没有议价能力,想要高薪几乎没有可能性,要么就是面试失败,要么就是被疯狂压价 但干撸源码,太tm难了,拿我们用得最多的spring来说,当阅读它的时候会感觉,这代码怎么跳来跳去的,根本不是像自己写代码一样那么单纯,为什么那么多的接口和接口继承,类A继承的类B还实现了类A实现的接口X,简单工...

m0_63437643的博客 576

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java 基础全攻略:从语法到实战项目(简单总结)

本文是一套系统的Java学习笔记,涵盖从基础语法到实战项目的完整知识体系。主要内容包括:Java入门与环境搭建、基础语法(数据类型、运算符、流程控制)、方法使用、数组操作;面向对象核心特性(类与对象、封装、继承、多态);常用工具类(String、异常处理、日期类);以及图书管理系统实战项目(包含模块设计、业务逻辑实现等)。文章提供详细代码示例和调试方法,适合Java初学者系统学习。通过点赞关注支持作者持续更新更多优质内容。

HRDMN的博客 750

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

GPT-5.6直连实战:重构PPT/Word/Excel工作流,从提示工程到自动化生成

在办公自动化和智能文档处理领域,生成式AI正从概念走向工程实践。其核心原理是基于大规模语言模型的意图理解与内容结构化能力,能够将自然语言指令转化为具体的文档框架与内容。这一技术的核心价值在于,它将工作者从繁琐的格式调整和基础内容编排中解放出来,实现了从“工具操作者”到“工作流架构师”的角色转变。其典型应用场景包括技术方案撰写、项目报告生成、数据可视化分析等结构化文档的快速产出。本文聚焦于如何通过精准的提示工程,指挥GPT-5.6这类模型高效生成可直接使用的Office文档,并深入探讨了国内直连环境下的工程化

weixin_29057163的博客 272

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

springboot游泳馆管理系统 毕业设计----附源码79222

用户在登录界面点击“登录”按钮后,需输入用户名、密码以及验证码以完成身份验证操作。系统在前端会自动对所输入信息进行有效性校验,同时检查该用户是否已通过后台审核流程。若审核通过且信息无误,则系统将允许用户成功登录并跳转至相应的功能界面;反之页面会弹出相应的提示信息,提醒用户重新输入或检查相关信息的正确性。

DZbishe的博客 454

【JVM调优】如何进行JVM调优?一篇文章就够了!

深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。

种一棵树最好的时间是十年前,其次是现在 4万+

巨大的JVM知识点思维导图

之前总结过的一份JVM思维导图,分享一下。撑撑博客数量,哈哈。。 图太大了,无法上传,传一份文字版吧。需要图的可以移步 类加载子系统 加载 字节码文件通过加载器CLassLoader加载到内存元空间 ClassLoader BootstrapClassLoader 启动类加载器,顶级类加载器,负责加载JDK核心包rt.jar等,由C编写,所以在java中没有类与之对应,无法获取。...

maybe的博客 486

JVM思维导图分享(包含详细知识点)

本文将JVM整理成思维导图,方便知识归纳与查询

xujunkai66的博客 1437

JVM——JVM知识脑图

摘要本博文主要分享JVM知识脑图,同时介绍博主关于JVM专栏链接。分享一些有关于JVM学习资料,帮助大家更好的学习和理解JVM的底层原理。同时给出一线大厂面试问题与答案供大家参考学习。一、JVM知识脑图1.1 JVM学习脑图1.2 JDK1.8下JVM内存结构原理1.3 JDK1.7下JVM内存结构原理1.4 JDK1.6下JVM内存结构原理二、JVM专栏知识介绍2.1 JVM 面试问题与解答2.2 JVM内存模型。

庄小焱 737

JVM的一些简单总结思维导图和理解

自定义类加载器加载一个类需要:继承ClassLoader,重写findClass,如果不想打破双亲委派模型,那么只需要重写findClass;如果想打破双亲委派模型,那么就重写整个loadClass方法,设定自己的类加载逻辑。

weixin_55029324的博客 2190

JVM详解(曼波脑图版)

(✪ω✪)ノ 好哒!曼波会用最可爱的比喻给小白同学讲解JVM,准备好开启奇妙旅程了吗?(๑˃̵ᴗ˂̵)و📌 思维导图。

Eugene__Chen的博客 1910
上一篇: 阿里巴巴开源新品:使用Spring进行Java Web开发的指导手册
下一篇: 朋友从腾讯离职,“偷偷”带走了这套Java核心笔记,我看完后真香啊!
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值