摘要: 1. 浅堆(Shallow Heap) 浅堆是指一个对象所消耗的内存。在32位系统中,一个对象引用会占据4个字节,一个int类型会占据4个字节,long型变量会占据8个字节,每个对象头需要占用8个字节。根据堆快照格式不同,对象的大小可能会同8字节进行对齐。 以String为例:2个int值共占8字节 阅读全文
posted @ 2021-05-31 22:16 阳神 阅读(667) 评论(1) 推荐(1) 编辑
摘要: 5.1. GC分类 针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC) 部分收集(Partial GC):不是完整收集整个Java堆的垃圾收集。其中又分为: 新生代收集(Minor GC / Young 阅读全文
posted @ 2021-05-31 22:10 阳神 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 4.1. JVM参数选项 官网地址:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 4.1.1. 类型一:标准参数选项 > java -help 用法: java [-options] class [ar 阅读全文
posted @ 2021-05-31 22:08 阳神 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。 2.要求用户登录到目标 Java 应用所在的宿主机上,使用起来不是很方 阅读全文
posted @ 2021-05-31 22:06 阳神 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 2.1. 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。 Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络 阅读全文
posted @ 2021-05-31 22:00 阳神 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 1.1. 大厂面试题 支付宝: 支付宝三面:JVM性能调优都做了什么? 小米: 有做过JVM内存优化吗? 从SQL、JVM、架构、数据库四个方面讲讲优化思路 蚂蚁金服: JVM的编译优化 jvm性能调优都做了什么 JVM诊断调优工具用过哪些? 二面:jvm怎样调优,堆内存、栈空间设置多少合适 三面: 阅读全文
posted @ 2021-05-31 21:52 阳神 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 4.1. 概述 类加载器是JVM执行类加载机制的前提。 ClassLoader的作用: ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的ja 阅读全文
posted @ 2021-05-31 21:48 阳神 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 3.1. 概述 在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 其中,验证、准备、解析3个部分统称为链接(Linki 阅读全文
posted @ 2021-05-31 21:37 阳神 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 2.1. 概述 2.1.1. 执行模型 如果不考虑异常处理的话,那么Java虚拟机的解释器可以使用下面这个伪代码当做最基本的执行模型来理解 do{ 自动计算PC寄存器的值加1; 根据PC寄存器的指示位置,从字节码流中取出操作码; if(字节码存在操作数) 从字节码流中取出操作数; 执行操作码所定义的 阅读全文
posted @ 2021-05-31 21:25 阳神 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 1. Class文件结构 1.1. Class字节码文件结构 类型 名称 说明 长度 数量 魔数 u4 magic 魔数,识别Class文件格式 4个字节 1 版本号 u2 minor_version 副版本号(小版本) 2个字节 1 u2 major_version 主版本号(大版本) 2个字节 阅读全文
posted @ 2021-05-31 21:10 阳神 阅读(132) 评论(0) 推荐(0) 编辑
摘要: GC 分类与性能指标 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将GC分为不同的类型。 Java不同版本新特性 语法层面:Lamb 阅读全文
posted @ 2021-05-31 21:01 阳神 阅读(107) 评论(0) 推荐(0) 编辑
摘要: System.gc() 的理解 在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不 阅读全文
posted @ 2021-05-31 19:57 阳神 阅读(116) 评论(0) 推荐(0) 编辑
摘要: Java 和 C语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要程序员手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什么时候回收? 如何回 阅读全文
posted @ 2021-05-31 17:47 阳神 阅读(85) 评论(0) 推荐(0) 编辑