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

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

应粉丝强烈要求,除了面试经验,还要霸哥多分享一些常见的面试技术点。

刚好前段时间得到了一份关于Java的核心面试知识点的PDF文件,经过整理,然后现在拆分成专题进行分享。

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

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

注:整体JVM知识点的数量相对于前两个知识点会比较多,为了防止文章过于冗长,霸哥这边将只详细分享部分知识点, 其它知识点有需要的朋友可以下方扫码即可获取最新版的 PDF 哦

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 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。

......

如果你看完这些知识点发现自己都掌握了,薪资却没有18K,赶紧跳槽吧!
有需要的朋友可以下方扫码即可获取最新版的 PDF 哦
工作两年,靠BIG佬的Java面试宝典,跳槽到京东,月薪直涨10K 不管是校招还是社招都避免不了各种⾯试、笔试。 如何去准备这些东⻄就显得格外重要,之前4月底阿里的人事部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给京东hr,人事审核后经过一些列面试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本人手里还有其他的一些offer,还没有定下来,顺便在此分享一下我面试京东的一些经验以及面试题总结的分享!(以上为网友视角阐述) 阅读详情

相关推荐

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

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

欢迎您访问我的公众号【前程有光】 4725

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

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图[外链图片转存中…(img-xGXgUofC-1714704827152)]本文已被。

2401_84004024的博客 711

时序基础模型Timer-S1:十亿参数如何革新时间序列预测

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势。其原理在于捕捉数据中的趋势、周期性和季节性等时序依赖关系。这项技术的价值在于赋能业务决策,广泛应用于金融风控、能源管理、物联网监控和供应链优化等关键场景。传统方法依赖针对特定任务的专用模型,面临泛化能力弱和开发成本高的挑战。本文聚焦的时序基础模型,通过在海量跨领域数据上进行预训练,学习时序通用模式,并结合十亿级参数带来的强大容量,实现了性能的显著突破。这种范式转变,使得模型能够像“全科医生”一样,通过少量数据微调即可快速适应新任务,

weixin_29164843的博客 269

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

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

m0_69305074的博客 260

手把手教你用三极管搭建麦克风音频放大电路(附完整电路图)

本文详细介绍了如何使用三极管搭建麦克风音频放大电路,包括电路设计基础、元件选择、完整电路图及分步焊接指南。通过实际操作和调试技巧,帮助电子爱好者和学生深入理解模拟电路原理,实现音质清晰的音频放大效果。

Black的专栏 988

怎样自己亲手搭建一个四比特加法器

如何用三极管搭建一个四比特加法器 一、前言 作为大一上学期第一个大作业,最终还是拖到了冬学期的第八周,从第七周的周六开始,一直到第八周周五上午课上展示,中间连续熬了好几天的夜,另外,白天凡是有时间都用在研究它了,最终大约是用了30个小时,完成了这个四比特加法器的“从零到一”。 最终,小组得分92,个人分数100(贡献比35%),也不枉自己投入的心血 二、器材 电阻 1 包(10kΩ×100,1kΩ×50) 三极管 1 包(9013×100,LED×6) 跳线 3 短 1.5 长 电源 1 个 USB 线

qq_34771124的博客 1万+

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

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

Java_may的博客 498

实测OV5640 DVP/MIPI接口720p@60fps配置,为什么我的Zynq-7020开发板只有30帧?

本文深入解析了OV5640摄像头在Zynq-7020开发板上帧率减半的问题,从寄存器配置到硬件链路进行全面排查。重点分析了DVP/MIPI接口的720p@60fps配置,提供了关键寄存器设置、时序参数调整及硬件带宽验证方法,帮助开发者快速定位并解决帧率下降问题。

weixin_42634811的博客 346

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

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

banzhuanhu的博客 5606

【SoloPi】SoloPi使用2-功能使用,录制回放

Soloπ是什么 Soloπ是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。 录制回放功能 Soloπ拥有录制操作的能力,用户只需要通过Soloπ执行用例步骤,Soloπ就能够将用户的操作记录下来,并且支持在各个设备上进行回放,这一切都能够在手机上独立完成。 ...

q_Catherine的博客 5829

基于matlab实现的水果识别系统设计

本项目针对多种常见水果混合的图像,利用 Matlab 软件,对水果的识别进行研究。根据水果和背景的差别选取阈值,对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测,选定连通区域,标记后再对不同种水果的颜色,形状,大小等特征进行快速识别水果,从而实现对水果的正确分拣。:水果识别、MATLAB、数字图像处理。

热情、奔放、快乐编程! 4863

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

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

Chenhui98的博客 257

拼多多全站商品SKU数据爬虫实战:Python自动化采集与清洗

在电商数据分析领域,SKU(Stock Keeping Unit,库存量单位)数据是洞察商品策略、价格体系和市场竞争格局的核心抓手。本文以拼多多平台为研究对象,系统讲解如何利用Python构建一套完整的全站商品SKU自动化采集与清洗流程。文章涵盖目标分析与反爬策略、网络请求模拟、数据解析、分布式存储、数据清洗与标准化,以及调度与运维等全链路环节,并提供可直接运行的代码示例。拼多多API返回的数据结构大致如下(已脱敏):json"goods_name": "某品牌运动鞋",

2201_76125261的博客 217

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

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

jcc4261的博客 2808

Open3D点云数据处理(二):读写点云,你真的会吗?

本文详细介绍了open3d加载点云、保存点云的方法,同时打印点云坐标、颜色、法向量等字段信息。

孙悟空 2604

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

weixin_59330273的博客 585

NTscan扫描工具

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

javassb的博客 3110

【面经】程序员工作三年月薪9K,果断跳槽拿下字节,25K16薪

(一)调整自己的心态,正确面对得失面试中常见的问题,主要是心态,面试调整心态是第一位的,如何调整成最佳心态呢?很多求职者在面试过程中自己思路不清晰,语言不流畅,说话毫无逻辑,会不断否定自己,归根结底都是面试心态问题,所以调整自己的心态,正确面对得失是非常重要的,我的方法是给自己足够的心理暗示。(二)提升技术,扩宽知识对于程序员来说,要想成长为一名行业内的大牛大神级别的人物,那么唯一的办法就是通过学习,来不断提升自己的技术,扩宽知识,达到一定的高度和深度。那么如何提升自己的技术,扩宽自己的知识储备呢?

2401_85729264的博客 1035
上一篇: 圈内大佬呕心之作,一年后斩获腾讯T3,这份Java学习笔记有多厉害
下一篇: 送你一瓶好运喷雾,2022BAT大厂最新Java热门面试题及答案总结
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值