想涨薪?掌握这套JVM核心知识,月薪不超过18K直接考虑换工作吧!

从事Java程序员五年的艰辛之路。月薪从3k到18k,我整整花了五年 先说一下自己的个人情况,大专生,16 年通过校招进入广州光汇科技软件公司,干了接近 3 年的 CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年的 CRUD,已经让我变得不思进取,谈了 2 年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,放眼于今年的金三银四! 刚开始准备时,自己都蒙了,3 年的 CRUD 让我的技术没有一丝的进步,提升的只有我的年龄... 没办法,我找到了我的导师,作为他的得力弟子,在他了解了我的情况 阅读详情

如果说,Java基础和集合是进入Java开发的基石,那么JVM则是打开进一步打开Java开发大门的钥匙。

下面这套JVM知识能够掌握下来,月薪18K完全没问题,这里所说的不是精通,能够精通这套JVM体系,当然自会更高。

注:整体JVM知识点的数量相对于前两个知识点会比较多,为了防止文章过于冗长,霸哥这边将只详细分享部分知识点

JVM核心知识点

线程

JVM内存区域

JVM运行时内存

垃圾回收与算法

Java四种应用类型

GC分代收集算法VS分区收集算法

GC垃圾收集器

Java IO/NIO

JVM类加载机制

基本概念:

JVM 是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆和一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。

运行过程:

我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。

也就是如下:

① Java 源文件—->编译器—->字节码文件
② 字节码文件—->JVM—->机器码

每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是 Java 为什么能够跨平台的原因了,当一个程序从开始运行,这时虚拟机就开始实例化了,多个程序启动就会存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,多个虚拟机实例之间数据不能共享。


线程

这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。当线程结束时,会释放原生线程和 Java 线程的所有资源。

Hotspot JVM 后台运行的系统线程主要有下面几个:


JVM 内存区域

JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。

线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 HotspotVM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的生/死对应)。

线程共享区域随虚拟机的启动/关闭而创建/销毁。

直接内存并不是 JVM 运行时数据区的一部分, 但也会被频繁的使用: 在 JDK 1.4 引入的 NIO 提供了基于 Channel 与 Buffer 的 IO 方式, 它可以使用 Native 函数库直接分配堆外内存, 然后使用DirectByteBuffer 对象作为这块内存的引用进行操作(详见: Java I/O 扩展), 这样就避免了在 Java堆和 Native 堆中来回复制数据, 因此在一些场景中可以显著提高性能。

1、程序计数器(线程私有)

一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。

正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如果还是Native 方法,则为空。

这个内存区域是唯一一个在虚拟机中没有规定任何 OutOfMemoryError 情况的区域。

2、虚拟机栈(线程私有)

是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

栈帧( Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking)、 方法返回值和异常分派( Dispatch Exception)。栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛出了在方法内未被捕获的异常)都算作方法结束。

3、本地方法区(线程私有)

本地方法区和 Java Stack 作用类似, 区别是虚拟机栈为执行 Java 方法服务, 而本地方法栈则为Native 方法服务, 如果一个 VM 实现使用 C-linkage 模型来支持 Native 调用, 那么该栈将会是一个C 栈,但 HotSpot VM 直接就把本地方法栈和虚拟机栈合二为一。

4、堆(Heap-线程共享)-运行时数据区

是被线程共享的一块内存区域,创建的对象和数组都保存在 Java 堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。由于现代 VM 采用分代收集算法, 因此 Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。

5、方法区/永久代(线程共享)

即我们常说的永久代(Permanent Generation), 用于存储被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据. HotSpot VM把GC分代收集扩展至方法区, 即使用Java堆的永久代来实现方法区, 这样 HotSpot 的垃圾收集器就可以像管理 Java 堆一样管理这部分内存,而不必为方法区开发专门的内存管理器(永久带的内存回收的主要目标是针对常量池的回收和类型的卸载, 因此收益一般很小)。

运行时常量池(Runtime Constant Pool)是方法区的一部分。Class 文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。 Java 虚拟机对Class 文件的每一部分(自然也包括常量池)的格式都有严格的规定,每一个字节用于存储哪种数据都必须符合规范上的要求,这样才会被虚拟机认可、装载和执行。


JVM 运行时内存

Java 堆从 GC 的角度还可以细分为:新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。


垃圾回收与算法


JAVA 四种引用类型

1、强引用

在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之一。

2、软引用

软引用需要用 SoftReference 类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。软引用通常用在对内存敏感的程序中。

3、弱引用

弱引用需要用 WeakReference 类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管 JVM 的内存空间是否足够,总会回收该对象占用的内存。

4、虚引用

虚引用需要 PhantomReference 类来实现,它不能单独使用,必须和引用队列联合使用。虚引用的主要作用是跟踪对象被垃圾回收的状态。


GC 分代收集算法 VS 分区收集算法

......


GC 垃圾收集器

......


JAVA IO/NIO

......

......

JVM 类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。

......

历时半年!从外包小公司到现在阿里网易25K,分享一下自己的涨薪经验! 前言 首先自我介绍一下,本人普通一本毕业,年初因为疫情的原因被老东家裁员干掉了,之后一直住在朋友那混吃等死,转折是5月份,五月初的时候和大佬吃了个饭,觉得自己不能这样下去了,拿着某大佬给我的面试资料和自己在网上看的面经,在9月份拿到了网易的内推机会,面试一共经历了一个月,终于在上个月成功拿到口头offer,现在我也来写面经帮助大家! 网易面试题 1、redis有哪几种数据结构?给你一个key怎么知道是用的哪种结构? 2、怎么查看所有的key?redis怎么切换库?怎么清数据? 3、描述下redis淘汰策略? 阅读详情

相关推荐

工作两年,靠BIG佬的Java面试宝典,跳槽到京东,月薪直涨10K

不管是校招还是社招都避免不了各种⾯试、笔试。 如何去准备这些东⻄就显得格外重要,之前4月底阿里的人事部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给京东hr,人事审核后经过一些列面试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本人手里还有其他的一些offer,还没有定下来,顺便在此分享一下我面试京东的一些经验以及面试题总结的分享!(以上为网友视角阐述)

程序媛小琬的博客 1072

想涨薪?掌握这套JVM核心知识,月薪不超过18K直接考虑换工作吧

应粉丝强烈要求,除了面试经验,还要霸哥多分享一些常见的面试技术点。刚好前段时间得到了一份关于Java的核心面试知识点的PDF文件,经过整理,然后现在拆分成专题进行分享。识点,如果说,Java基础和集合是进入Java开发的基石,那么JVM则是打开进一步打开Java开发大门的钥匙。下面这套JVM知识能够掌握下来,月薪18K完全没问题,霸哥这里所说的不是精通,能够精通这套JVM体系,当然自会更高。高清完整大图即可获取。

Trouvailless的博客 141

Matlab实战:手把手教你用Zernike多项式模拟光学像差(附完整代码)

本文详细介绍了如何在Matlab中使用Zernike多项式模拟光学像差,包括基础理论、不同排序系统的实现、完整代码示例以及高级应用技巧。通过Zernike多项式,可以有效地描述和分析光学系统中的波前畸变,适用于望远镜校正、眼科光学等多个领域。

weixin_42523720的博客 161

掌握这套JVM核心知识,月薪不超过18K直接考虑换工作吧

应粉丝强烈要求,除了面试经验,还要霸哥多分享一些常见的面试技术点。刚好前段时间得到了一份关于Java的核心面试知识点的PDF文件,经过整理,然后现在拆分成专题进行分享。识点,如果说,Java基础和集合是进入Java开发的基石,那么JVM则是打开进一步打开Java开发大门的钥匙。下面这套JVM知识能够掌握下来,月薪18K完全没问题,霸哥这里所说的不是精通,能够精通这套JVM体系,当然自会更高。

m0_69305074的博客 260

实战指南 | Adjust 与 Facebook、Google Ads 自归因配置全流程解析

本文详细解析了Adjust与Facebook、Google Ads自归因配置的全流程,帮助移动应用出海推广者解决广告归因难题。通过自归因功能(SAN),开发者可以获取更准确的数据、简化配置流程并扩大安装来源覆盖,显著提升广告效果监测和ROI计算效率。

weixin_42528780的博客 539

配置oem 13c以监控管理数据库

使用oem13c监控数据库

雅冰石的专栏 1811

外包 CRUD3 年,被导师一句话点醒,直接涨薪 15K

先说一下自己的个人情况,大专生,18 年通过校招进入湖南金蝶软件公司,干了接近 3 年的 CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年的 CRUD,已经让我变得不思进取,谈了 2 年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,放眼于今年的金九银十! 刚开始准备时,自己都蒙了,3 年的 CRUD 让我的技术没有一丝的进步,提升的只有我的年龄... 没办法,我找到了我的导师,作为他的得力弟子,在他了解了我的情况后(

Java_may的博客 497

2025华为杯第二十二届中国研究生数学建模竞赛E题:高速列车轴承智能故障诊断问题 - 完整解题分析+完整MATLAB源码!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1992

历时半年!从外包到现在阿里网易25K,分享一下自己的涨薪经验

对于大厂,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,自然面试过程中就要有底气得多。下面这些资料全部无偿提供给大家,希望对大家有帮助:对于大厂面试,我最后想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键!

jcc4261的博客 2808

一篇文章认识《双目立体视觉》

双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,具有深度的信息;单目视觉只能看到二维的物体。 1)双目摄像头 2)双目相机基线 3)打开双目摄像头 4)双目测距 视差disparity、 极线约束、 极线校正/立体校正、 a.双目标定 b.双目矫正 c.立体匹配 d.双目测距(三角测量) e.测距效果 立体视觉方法评测网站

黎国溥 7958

2021.02.23丨Virsorter2安装使用及答疑

最近项目比较多,又在学英语,写文章的时间少了很多。最近接到一个病毒组装的项目。用之前组装工具(ABYSS、SPAdes)都没有能够组装较为完整的scafford,今天介绍一款专门用于组装病毒的工具——Virsorter。 Virsorter最早版本发布于2015年,目前已经有了第二个版本。主要用于病毒的组装的注释。详细情况可以查看文章:https://peerj.com/articles/985/ 安装流程 安装文档: https://github.com/jiarong/VirSorter2/b

4835

Java程序员月薪20k的涨薪秘籍,没点绝活敢跳槽吗?

前言: 随着秋招的开启,不管是应届毕业生找工作,还是在职程序员跳槽去找更高薪水的工作,都要面临面试这一难关。应对面试不仅需要丰富的项目经历,还需要牢固的基础知识。在这里整理一些比较详细的Java高频面试题,并给出答案供大家参考。这些面试题与答案,毫不夸张的说涵盖Java面试中大部分的知识,当然关于实际项目开发方面有所欠缺,这就需要大家靠自己了。 大家可以看看下面的题看看差距有多大,下面的题目这么多答案我就不写啦(因为我有总结笔记),想要笔记和总结的可以点击795983544领取 暗号优快云。另外本人

banzhuanhu的博客 5606

uniapp微信小程序 - 解决苹果ios底部输入框被软键盘遮挡的问题,input/textarea底部输入框被弹出的软键盘挡住部分或全部遮住(解决uniApp小程序底部输入框,键盘弹起时页面整体上移

uniapp: IOS微信小程序输入框部分被软键盘遮挡问题,iOS微信小程序键盘弹出时输入框被挡住,uniapp小程序苹果IOS系统软键盘唤起导致底部输入框被遮挡的问题,ios 键盘弹出input输入框被遮挡,uniapp textarea输入框软键盘遮挡问题,苹果手机ios系统,解决uni-app微信小程序底部输入框,键盘弹起时页面整体上移 问题,关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案,uniapp使用输入框固定在底部键盘弹起把输入框挡住问题,安卓上没问题就苹果不行,仅ios

🏆 前端领域优质创作者 5597

想涨工资,工作两年如何跳槽到大厂?月薪直涨10K

不管是校招还是社招都避免不了各种⾯试、笔试。如何去准备这些东⻄就显得格外重要,之前4月底阿里的人事部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给京东hr,人事审核后经过一些列面试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本人手里还有其他的一些offer,还没有定下来,顺便在此分享一下我面试京东的一些经验以及面试题总结的分享!(以上为网友视角阐述)

Chenhui98的博客 257

ComfyUI 汉化教程(中文界面)

如果你对翻译的结果不满意,还可以进行修改。首先,进入目录,可以看到该目录中有很多 JSON 文件:打开 JSON 文件,找到要修改的内容,修改对应的Value值即可:最后,重启 ComfyUI 即可。

水滴的博客 1万+

SAP B1中文培訓教材_SDK

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

我的天!做Java九个月涨薪7K,这究竟是怎么做到的

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》

2301_79655496的博客 808

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java程序员3个月从月薪6k涨到15k,你知道我是怎么过来的吗?

先说一下自己的个人情况,大专生,18年通过校招进入湖南金蝶软件公司,干了接近3年的CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年的CRUD,已经让我变得不思进取,谈了2年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,放眼于今年的金三银四! 刚开始准备时,自己都蒙了,3年的CRUD让我的技术没有一丝的进步,提升的只有我的年龄... 没办法,我找到了我的导师,作为他的得力弟子,在他了解了我的情况后(几乎就是Java基础

文章中资料均可获取,有需要请添加yunduoa2019即可 150

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

程序员涨工资的秘诀,Java程序员3个月从月薪6k涨到15k,你知道我是怎么过来的吗?

先说一下自己的个人情况,大专生,18年通过校招进入湖南金蝶软件公司,干了接近3年的CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年的CRUD,已经让我变得不思进取,谈了2年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,放眼于今年的金三银四! 刚开始准备时,自己都蒙了,3年的CRUD让我的技术没有一丝的进步,提升的只有我的年龄... 没办法,我找到了我的导师,作为他的得力弟子,在他了解了我的情况后(几乎就是Jav...

weixin_59330273的博客 585

2024金三银四吃透这份Java面试突击手册!成功跳槽涨薪30K

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

2401_84407849的博客 599

大专Java程序员阿伟从月薪6k涨到20k,你知道这3年他是怎么过的吗?

先说一下自己的个人情况,大专生,18年通过校招进入湖南金蝶软件公司,干了接近3年的CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年的CRUD,已经让我变得不思进取,谈了2年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,放眼于今年的金三银四! 刚开始准备时,自己都蒙了,3年的CRUD让我的技术没有一丝的进步,提升的只有我的年龄... 没办法,我找到了我的导师,作为他的得力弟子,在他了解了我的情况后(几乎就是Java基础

javassb的博客 3110

内存数据库SQLite

本文以“黑板”比喻内存数据库,对比传统硬盘数据库,详解 SQLite 使用 :memory: 实现高速临时存储的原理与优势。通过动态占位符生成、executemany 批量操作等技巧,实现毫秒级数据读写,适用于单元测试、临时计算与隐私保护场景。强调其瞬时性与内存限制,提醒开发者注意数据量控制与安全防护,突出参数化查询防注入的核心价值。

看了都说刑的博客 326
上一篇: 大厂面试内幕:阿里内部整理出的5000页Java面试复盘指南,起飞
下一篇: “超高频SSM面试点+源码解析+实战”,一次性干掉全拿走
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值