JVM--Java核心面试知识整理(一)

JVM 基本概念 JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。 运行过程 我们都知道 Java 源文件通过编译器,能够产生相应的.Class 文件,也就是字节码 ... »

【JVM进阶之路】十:JVM调优总结

1、调优原则 JVM调优听起来很高大上,但是要认识到,JVM调优应该是Java性能优化的最后一颗子弹。 比较认可廖雪峰老师的观点,要认识到JVM调优不是常规手段,性能问题一般第一选择是优化程序,最后的选择才是进行JVM调优。 JVM的自动内存管理本来就是为了将开发人员从内存管理的泥潭里拉出来。即使不 ... »

从HotSpot VM源码看字符串常量池(StringTable)和intern()方法

引言 字符串常量池(StringTable)是JVM中一个重要的结构,它有助于避免重复创建相同内容的String对象。那么StringTable是怎么实现的?“把字符串加入到字符串常量池中”这个过程发生了?intern()方法又做了什么?上面的问题在JDK6和JDK7中又有什么不一样的答案? 网络上 ... »

【死磕JVM】给同事讲了一遍GC后,他要去面试,年轻人,就是容易冲动!

前言 在一个风和日丽的中午,和同事小勇一起走在公司楼下的小公园里面,看到很多的小姐姐,心想什么时候能够和这些小姐姐一起讨论人生呀,美滋滋,嘿嘿嘿。 收起你的哈喇子好不好,小勇总是在这个时候发出声音,挺让人喜(fu)欢(ck)的。 小勇:小农,现在不是推崇垃圾分类吗,你说到底什么是垃圾?小勇总是在我和 ... »

【JVM进阶之路】八:性能监控工具-命令行篇

定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。 在实际的故障排查、性能监控中,常常是操作系统的工具和Java虚拟机的工具结合使用。 1、操作系统工具 1.1、top:显示系统整体资源使用情况 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资 ... »

图文详解Java对象内存布局

作为一名Java程序员,我们在日常工作中使用这款面向对象的编程语言时,做的最频繁的操作大概就是去创建一个个的对象了。对象的创建方式虽然有很多,可以通过new、反射、clone、反序列化等不同方式来创建,但最终使用时对象都要被放到内存中,那么你知道在内存中的java对象是由哪些部分组成、又是怎么存储的 ... »

CMS前世今生

CMS一直是面试中的常考点,今天我们用通俗易懂的语言简单介绍下。 垃圾回收器为什么要分区分代? 如上图:JVM虚拟机将堆内存区域分代了,先生代是朝生夕死的区域,老年代是老不死的区域,不同的年代对象有不同特性,因此需要不同的垃圾收集器去处理。如下图,黑竖线左边的区域都是分代垃圾收集器,G1之后内存就不 ... »

【JVM进阶之路】一:Java虚拟机概览

1、Java简史 Java语言是一门通用的、面向对象的、支持并发的程序语言。全球从事Java相关开发的人员已经数以百万计。 从1995年“Java”正式出现以来,Java已经经历了二十几年的发展。 Java语言之所以能广受欢迎,其中的原因之一是Java是一门可以跨平台的语言。 而跨平台的特性就是通过 ... »

JVM之调优及常见场景分析

JVM调优 GC调优是最后要做的工作,GC调优的目的可以总结为下面两点: 减少对象晋升到老年代的数量 减少FullGC的执行时间 通过监控排查问题及验证优化结果,可以分为: 命令监控:jps、jinfo、jstack、jmap、jstat、jhat 图形化监控:JConsole和VisualVM 阿 ... »

JVM之对象回收

finalize /** *此代码演示了两点: *1.对象可以在被GC时自我拯救。 *2.这种自救的机会只有一次,因为一个对象的finalize()方法最多只会被系统自动调用一次 */ public class FinalizeEscapeGC { public static FinalizeEsc ... »

JVM笔记 -- 来,教你类加载子系统

类加载子系统 类文件首先需要经过类加载子系统,进行加载,进类信息等加载到运行时数据区,生成Klass的实例。 在类加载子系统中有以下3个阶段操作(广义上的加载): 加载阶段 Bootstrap ClassLoader:引导类加载器,主要加载JDK里面的核心类 Extension ClassLoade ... »

JVM笔记--如果你写JVM,最需要考虑的重要结构是什么?

开局一张图,前面已经从每一部分解析过JVM的内存结构了,现在按照顺序来分析: 整体上来看:类文件从类加载子系统,加载完成之后,主要存放在方法区(JRockit和H9没有方法区,这里指的是HotSpot)。运行时的数据主要是存放在运行时数据区,代码的解释编译优化以及垃圾收集,都是在执行引擎中。本地方法 ... »

叫练手把手教你读JVM之GC信息

案例 众所周知,GC主要回收的是堆内存,堆内存中包含年轻代和老年代,年轻代分为Eden和Surivor,如下图所示。我们用案例分析下堆的GC信息【版本:HotSpot JDK1.8】。 /** * @author :jiaolian * @date :Created in 2021-03-15 15 ... »

【死磕JVM】一道面试题引发的“栈帧”!!!

前言 最近小农的朋友——小勇在找工作,开年来金三银四,都想跳一跳,找个踏(gao)实(xin)点的工作,这不小勇也去面试了,不得不说,现在面试,各种底层各种原理,层出不穷,小勇就遇上了这么一道面试题,因为没有回答好,面试被PASS,让他备受打击,作为大(lao)哥(si)哥(ji)的我,肯定要安慰一 ... »

JVM实战调优(空格引发的服务异常)

JVM实战调优 问题描述 某一个项目中有一个文字转语音的服务,使用的是科大讯飞的语音转换服务,需要调用三方服务。因其转换服务是一个耗时操作,官方给的demo使用的是 WebSocket 进行数据转换操作。项目中使用线程池进行调用。同时科大讯飞的语音合成有长度限制,官方给出的在[8000字节,约200 ... »

最简单的JVM内存结构图

JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前一样,案例先行,方便大家理解记忆。 /** * @author :jiaolian * @date :Created in 2021-03-10 21:28 * @description:hell ... »

JVM笔记 -- JVM经历了什么?

Sun Classic VM 世界上第一款商用 Java 虚拟机,JDK1.4 已经淘汰。 内部只有解释器,可以自己外挂JIT编译器,但是二者只能使用其一,不能配合工作。 hotspot 内置了该虚拟机。 解释器,需要逐行解释执行,效率低下。譬如:如果循环两千次,循环体很大,每次执行都需要解释执行。 ... »

JVM 中的垃圾回收

说到JVM,总是绕不开垃圾回收,因为其是JVM的核心之一,因为对象的创建是非常频繁的,想要提高程序的执行效率,拥有一个高效的垃圾回收机制是必不可少的。 首先要明确,因为对象的创建只在堆中,所以垃圾回收主要发生在堆中,但是垃圾回收并不只是回收对象,也会回收一些废弃的常量和类对象。所以垃圾回收作用的位置 ... »

JVM笔记 -- JVM的生命周期介绍

Github仓库地址:https://github.com/Damaer/JvmNote 文档地址:https://damaer.github.io/JvmNote/ JVM生命周期 启动 执行 退出 启动 Java虚拟机的启动时通过引导加载器(bootstrap class loader)创建一个 ... »

对象的创建和分配

对象的创建 创建方式 1、 new 关键字直接创建。 new ObjectName()。 2、通过 Class 反射对象的 newInstance() 方法。ObjectName obj = ObjectName.class.newInstance()。 3、通过 Class 反射对象获取 Cons ... »