首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Java抽象小篮子
中南大学 Java
发布于湖南
关注
已关注
取消关注
jvm速成笔记
@Java抽象带篮子_转大模型应用开发版:
[八股速成]JVM篇
前言 我之前整理过JVM超详细八股笔记:https://www.nowcoder.com/discuss/593844277646471168?sourceSSR=search,但是说实话因为这份这份八股资料过于详细,内容过于充实,给背记带来了很大的挑战,所以我准备再出一系列帖子,内容就是我根据自己的面试经历和网上的面经,去筛选八股里面哪些是最常被问到的问题把它们整理出来,这样也能省去大家自己整理和筛选的时间,大家可以在面试前一两个小时快速把这一系列最常问八股的帖子拿出来看看,临时抱佛脚的效果应该很好。后面这系列帖子我会放入专栏https://www.nowcoder.com/creation/manager/columnDetail/0ybvLm,欢迎大家订阅。最后我想说,速成虽好,但是还是建议有时间就去看看我详细的八股笔记帖子。 想要学习Java冲实习或冲春招的,我能助你一臂之力,我之前整理了高质量可速成的魔改外卖项目话术和7000字轮子项目话术,还有超全超精品八股大全专栏,怎么写简历,怎么包装实习经历,怎么0基础速成冲春招和实习等等等等精品帖子,大家可以去看看我的精品文章汇总帖子:https://www.nowcoder.com/discuss/721704696242536448?sourceSSR=users 我的八股大全专栏(15w人学习,超千人订阅,牛客最受欢迎最高质量java八股专栏,多一句没有,少一句不行):https://www.nowcoder.com/creation/manager/columnDetail/j8ZZk0 1.常问问题 1.new一个对象到销毁的过程/java对象创建过程? 在Java中,从创建(new)一个对象到销毁的过程大致可以分为以下几个步骤: 检查类是否加载:对象的实际创建是通过new关键字实现的。当JVM遇到new关键字时,会检查类是否已经加载到运行时数据区的方法区,如果没有,则先进行类的加载和初始化。 分配内存空间:当使用new关键字创建一个对象时,JVM会在运行时数据区的堆中为该对象分配相应的内存空间。 初始化对象:JVM会调用相应的构造方法来初始化对象,给对象的成员变量赋予初始值。 使用对象:在程序运行过程中,可以通过对象引用来访问和操作对象的成员变量和方法。 对象不再被引用:当对象不再被任何变量或数据结构引用时,它就成为垃圾对象,等待垃圾回收器进行回收。 垃圾回收:JVM的垃圾回收器会定期检查堆内存中的垃圾对象,并自动回收它们所占用的内存空间。垃圾回收的具体时机和策略取决于JVM的垃圾回收算法。 内存空间释放:当垃圾对象被回收后,它们占用的内存空间会被释放,以便重新分配给新创建的对象。 需要注意的是,JVM的垃圾回收机制会自动处理对象的销毁和内存空间的释放,程序员无需手动进行这些操作。但是,为了提高程序性能和避免内存泄漏,程序员应该养成良好的编程习惯,及时释放不再使用的对象引用。 2.java程序运行流程是什么?(编译+运行) 运行流程: (-1) 编写java代码,文件后缀名为.java (0)通过java编译器(如javac)将java源代码编译成.class字节码文件 (1)类加载器(ClassLoader)将 class 字节码文件加载到内存中(运行时数据区),但是字节码文件是JVM定义的一套指令集规范,并不能直接交给底层操作系统去执行 (2)特定的命令解释器(执行引擎)将class字节码翻译成特定的操作系统指令集交给 CPU 去执行 (3)此时可能需要调用其他语言的本地库接口(Native Method Library)来实现整个程序的功能 3.类加载执行过程 Class 字节码文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 类加载的全过程,即加载、验证、准备、解析和初始化这五个阶段。 加载:查找和导入Class字节码文件通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 验证:保证加载类的准确性这一阶段的目的是确保Class文件的字节流包含的信息符合《Java虚拟机规范》的所有约束要求,从而保证这些信息被当作代码运行后不会危害虚拟机自身的安全。 准备:为类变量(即静态变量)分配内存并设置类变量初始值需要注意的是,这时候进行内存分配的仅包括类变量,而不包括实例变量 解析:把类中的符号引用转换为直接引用解析阶段主要是将常量池内的符号引用转换为直接引用。如果符号引用指向一个未被加载的类,或者未被加载类的字段或方法,那么解析将触发这个类的加载。符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式 的字面量,只要使用时能无歧义地定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目 标并不一定是已经加载到虚拟机内存当中的内容。各种虚拟机实现的内存布局可以各不相同,但是它们 能接受的符号引用必须都是一致的,因为符号引用的字面量形式明确定义在《Java虚拟机规范》的Class 文件格式中。直接引用(Direct References):直接引用是可以直接指向目标的指针、相对偏移量或者是一个能间接 定位到目标的句柄。直接引用是和虚拟机实现的内存布局直接相关的,同一个符号引用在不同虚拟机实 例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经在虚拟机的内存中 存在。 初始化:执行类的构造器方法初始化阶段是执行类的构造器方法的过程。这个方法是由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并而来的。若该类具有父类,JVM会保证父类的先执行,然后才执行子类的。 4.说下java的编译和运行2阶段 在编译阶段中,Java源代码通过前端编译器转换成字节码文件,即.class文件。而在运行阶段,这些字节码文件会被Java虚拟机(JVM)加载并执行。 编译时类型和运行时类型 编译时类型(Compile-time Type) 编译时类型是指在编译阶段确定的对象类型。这是由代码中的声明决定的,例如变量声明、方法参数或返回类型的声明。编译器使用这些类型来执行类型检查,确保代码符合Java语言的语法规则和类型系统规则。如果代码违反了这些规则,编译器将生成错误,并且程序无法编译成功。 运行时类型(Run-time Type) 运行时类型是指对象在程序实际执行时的实际类型。在运行时,对象的真实类型可能与编译时类型不同,尤其是在使用继承和多态的情况下。例如,如果你有一个父类类型的引用指向一个子类实例,那么该引用的编译时类型是父类,但其运行时类型是子类。 Animal animal = new Dog(); // 或者 new Cat() 在这个例子中: animal 的编译时类型是 Animal,因为这就是它在代码中被声明的类型。 animal 的运行时类型可能是 Dog 或者 Cat,具体取决于创建时传入的是哪个子类的实例。 2.JVM组成 1.JVM是什么(实现java跨平台) JVM(Java虚拟机)是Java跨平台的关键。在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class)。在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。同一份Java源代码在不同的平台上运行,它不需要做任何的改变,并且只需要编译一次。而编译好的字节码,是通过JVM这个中间的“桥梁”实现跨平台的,JVM是与平台相关的软件,它能将统一的字节码翻译成该平台的机器码 好处: 一次编写,到处运行 自动内存管理,垃圾回收机制 JVM怎么实现一次编写,到处运行? JVM(Java虚拟机)通过实现一次编写,到处运行的机制,使得Java程序可以在不同平台上运行。具体实现方式如下: Java源代码:首先,将Java源代码编译成字节码文件(.class文件)。字节码是一种中间代码,介于源代码和机器码之间,具有平台无关性。 字节码文件:字节码文件可以在任何安装了JVM的平台上运行。JVM负责将字节码文件解释执行或者即时编译成本地机器码。 JVM:JVM是Java程序的运行环境,它负责加载字节码文件、解释执行字节码或者将字节码即时编译成本地机器码。不同的操作系统和硬件平台上有不同的JVM实现,如Windows、Linux、macOS等。 跨平台支持:由于JVM的存在,Java程序可以在不同的操作系统和硬件平台上运行,实现了一次编写,到处运行的目标。 2.JVM由哪些部分组成 ClassLoader(类加载器):负责加载字节码文件(即 class 文件)到运行时数据区,class 文件在文件开头有特定的文件标示,并且ClassLoader 只负责class 文件的加载,至于它是否可以运行,则由 Execution Engine 决定。 Runtime Data Area(运行时数据区,即java内存):是存放java内存相关数据的,分为五部分:Stack(虚拟机栈),Heap(堆),MethodArea(方法区),PC Register(程序计数器),Native Method Stack(本地方法栈)。几乎所有的关于 Java 内存方面的问题,都是集中在这块。 Execution Engine(执行引擎):Class 文件被加载后,会把指令和数据信息放入内存中,Execution Engine 则负责把这些命令解释给操作系统,即将 JVM 指令集翻译为操作系统指令集。 Native Method Library(本地库接口):负责调用本地接口的。他的作用是调用不同语言的本地接口给 JAVA 用 3.运行时数据区(JVM内存) 1.运行时数据区包含了哪几个部分? 运行时数据区包含了堆、方法区、虚拟机栈、本地方法栈、程序计数器这几部分,每个功能作用不一样 堆:Java堆是线程共享的区域,主要用于存储new出来的对象实例(包括Class对象:每个类在加载到JVM的方法区时都会产生一个相应的Class对象)。在这里分配对象实例的内存空间,它是垃圾收集器管理的主要区域,通过-Xmx和-Xms参数可以调整堆的大小。堆内存的合理分配和释放对于Java程序的性能至关重要。堆是Java虚拟机所管理的内存中最大的一块,用于存放所有类实例和数组对象。Java堆可以细分为新生代(Young Generation)和老年代(Old Generation),其中新生代又可以进一步细分为Eden空间和两个Survivor空间(S0, S1)。空间大小比eden:survivor
点赞 36
评论 21
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-19 18:57
字节跳动_剪映_前端(实习员工)
3秒节孝子启动! (真心收简历内推快手)
时间线1.12 hr下午面完1.19 11点offer5个工作日, 每天都在问hr(有两个小姐姐都挺有耐心的) hhh虽然差点变成巨人观, 也是在明天入职快手前复活了总结: 给快手磕了几个头, 太对不起了, 然后各位牛爷爷们可以发下简历直推杭州快手电商.
点赞
评论
收藏
分享
01-21 23:28
门头沟学院 前端工程师
都2026年了,React源码还值不值得读
随着前端技术生态的不断演进,React 作为目前最流行的前端框架之一,已经走过了十多个年头。在 2026 年这个时间节点,很多开发者都在思考一个问题:React 源码还值不值得深入阅读?这个问题的答案并不是简单的"是"或"否",而需要从多个维度进行分析。本文将从实际价值、学习成本、技术趋势等角度,为你提供一个全面的分析。为什么曾经值得读 React 源码?在讨论"现在是否值得"之前,我们先回顾一下为什么 React 源码曾经被认为是值得学习的经典。React 引入了很多开创性的概念:虚拟 DOM(Virtual DOM)虽然现在已不是...
点赞
评论
收藏
分享
2025-12-03 18:13
快手_测试开发(实习员工)
下班就想躺,这正常吗
实习前,每天上课睡觉或者学习,下课就去图书馆,周末基本都是睡醒了就去图书馆,晚上才回宿舍,每天刷力扣,背八股,也没觉得累过实习后,虽然每天也不加班,偶尔走的晚一点,但一回到出租屋就总是不想学习,就想躺着或者打游戏,也喜欢去买零食,总觉得上班虽然不累,但是很耗心力,眼下又到期末考试了,学校的课程也不能挂课,力扣和八股也该拾起来了,不能再躺了ld 请喝的奶茶和小蛋糕
卢来猴祖:
下班想着刷两道力扣,电脑掏出来刷了一个小时抖音
工作前VS工作后,你的心...
点赞
评论
收藏
分享
01-03 19:22
宁夏大学 产品经理
27届本科,写完简历感觉可以直接投字节
牛至超人:
很好,很有精神
投了多少份简历才上岸
点赞
评论
收藏
分享
01-23 10:39
首都经济贸易大学 管理咨询
货拉拉又摊上大事了
根据央视财经的最新报道,1月21日国家市场监管总局将货拉拉列为综合整治“内卷式”竞争的典型案例予以通报。国家市场监管总局指出:网络货运头部平台货拉拉存在利用算法不合理压低货运价格、利用平台规则实施强制独家车贴等行为,损害公平竞争市场秩序和货车司机利益,导致竞争性平台跟随实施低价策略,加剧行业“内卷式”竞争,存在垄断风险。一方面,货拉拉通过“一口价”等低价产品,将货运价格压制在极低水平,导致一些短途订单的运费甚至连油费都覆盖不了;另一方面,货拉拉要求司机张贴独家车贴,并把这个作为接单优先权等考核条件,变相限制了司机多平台接单的自由,还加速了行业内卷。算法演变成平台私权市场份额过大并不是衡量货拉拉...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
4
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习产出如何包装?
9328
2
...
32岁程序员猝死,底薪3千要24h待岗
2904
3
...
【官方活动】牛客新春计划:给陌生人的一封信
2636
4
...
实习生怎么快速融入团队
2368
5
...
后端从0开始来得及吗
1399
6
...
27届实习全时间全方位大体指南
1350
7
...
20多岁最痛苦的年纪
1277
8
...
绷不住了,找了一个月实习嵌入式还找不到
1231
9
...
25届工作半年,想辞职了
1131
10
...
在咖啡店、家里、公司走廊哪里都可以来一场面试
1061
创作者周榜
更多
正在热议
更多
#
牛客十周岁生日快乐
#
206884次浏览
1932人参与
#
你觉得什么岗位会被AI替代
#
34952次浏览
232人参与
#
我和mentor的爱恨情仇
#
101739次浏览
922人参与
#
一人一个landing小技巧
#
143198次浏览
1498人参与
#
如果工作一直消耗情绪还要继续做吗
#
18125次浏览
83人参与
#
四大天坑是哪四家?
#
101713次浏览
235人参与
#
互联网公司评价
#
479883次浏览
4091人参与
#
机械人春招想让哪家公司来捞你?
#
377851次浏览
3127人参与
#
聊聊你的被动加班经历
#
4588次浏览
80人参与
#
在国企工作的人,躺平了吗?
#
392198次浏览
3951人参与
#
我的求职精神状态
#
422567次浏览
3075人参与
#
华为工作体验
#
289488次浏览
1376人参与
#
实习吐槽大会
#
405061次浏览
2168人参与
#
工作压力大怎么缓解
#
138982次浏览
1261人参与
#
找工作以来,你最看不惯__
#
17776次浏览
352人参与
#
你的mentor是什么样的人?
#
49309次浏览
705人参与
#
第一次找实习,我建议__
#
69357次浏览
841人参与
#
实习教会我的事
#
52271次浏览
413人参与
#
实习怎么做才有更好的产出
#
14179次浏览
264人参与
#
AI coding的好用工具分享
#
21912次浏览
410人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务