随笔分类 - JVM
摘要:参考资料:尚硅谷JVM教程 23.内存泄漏 内存泄漏 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用。那么对于这种情况下,由于代码的实现不同就会出现很多种内存泄漏问题(让JVM误以为此对象还在引用中,无法回收,造成内存泄漏)。 > 是否还被使用?是 > 是否还被需要?
阅读全文
摘要:参考资料:尚硅谷JVM教程 22.JVM运行时参数 22.1. JVM参数选项 官网地址:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 22.1.1. 类型一:标准参数选项 Server模式和Clien
阅读全文
摘要:参考资料:尚硅谷JVM教程 21.JVM监控及诊断工具-GUI篇 21.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。 2
阅读全文
摘要:参考资料:尚硅谷JVM教程 20. JVM监控及诊断工具-命令行篇 20.1. 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。 Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java
阅读全文
摘要:参考资料:尚硅谷JVM教程 19. 概述篇 19.1. 大厂面试题 支付宝: 支付宝三面:JVM性能调优都做了什么? 小米: 有做过JVM内存优化吗? 从SQL、JVM、架构、数据库四个方面讲讲优化思路 蚂蚁金服: JVM的编译优化 jvm性能调优都做了什么 JVM诊断调优工具用过哪些? 二面:jv
阅读全文
摘要:参考资料:尚硅谷JVM教程 18.再谈类的加载器 18.1. 概述 类加载器是JVM执行类加载机制的前提。 ClassLoader的作用: ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进
阅读全文
摘要:参考资料:尚硅谷JVM教程 17.类的加载过程(类的生命周期)详解 17.1. 概述 在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包
阅读全文
摘要:参考资料:尚硅谷JVM教程 字节码指令集 16.1. 概述 16.1.1. 执行模型 如果不考虑异常处理的话,那么Java虚拟机的解释器可以使用下面这个伪代码当做最基本的执行模型来理解 do{ 自动计算PC寄存器的值加1; 根据PC寄存器的指示位置,从字节码流中取出操作码; if(字节码存在操作数)
阅读全文
摘要:参考资料:尚硅谷JVM教程 15.class文件结构 15.1. Class字节码文件结构 类型 名称 说明 长度 数量 魔数 u4 magic 魔数,识别Class文件格式 4个字节 1 版本号 u2 minor_version 副版本号(小版本) 2个字节 1 u2 major_version
阅读全文
摘要:参考资料:尚硅谷JVM教程 14.垃圾回收器 14.1. GC分类与性能指标 14.1.1. 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器
阅读全文
摘要:参考资料:尚硅谷JVM教程 13. 垃圾回收相关概念 13.1. System.gc()的理解 在默认情况下,通过system.gc()或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而Syst
阅读全文
摘要:参考资料:尚硅谷JVM教程 12. 垃圾回收概述及算法 12.1. 垃圾回收概述 12.1.1. 什么是垃圾? 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什么时候回收? 如何回
阅读全文
摘要:参考资料:尚硅谷JVM教程 11. StringTable 11.1. String的基本特性 String:字符串,使用一对""引起来表示 String声明为final的,不可被继承 String实现了Serializable接口:表示字符串是支持序列化的。 String实现了Comparable
阅读全文
摘要:参考资料:尚硅谷JVM教程 10. 执行引擎 10.1. 执行引擎概述 执行引擎属于JVM的下层,里面包括解释器、及时编译器、垃圾回收器 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存
阅读全文
摘要:参考资料:尚硅谷JVM教程 9.直接内存 9.1. 直接内存概述 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。通常,访问直接内存的
阅读全文
摘要:参考资料:尚硅谷JVM教程 8.1 对象实例化 面试题 美团: 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服: Java对象头有什么? 8.1.1 创建对象的方式 new:最常见的方式、Xxx的静态方法,XxxBuilder/XxxFactory的静态方法 Class的newI
阅读全文
摘要:参考资料:尚硅谷JVM教程 7. 方法区 从线程共享与否的角度来看 7.1. 栈、堆、方法区的交互关系 7.2. 方法区的理解 官方文档:Chapter 2. The Structure of the Java Virtual Machine (oracle.com) 7.2.1. 方法区在哪里?
阅读全文
摘要:参考资料:尚硅谷JVM教程 6.1. 堆(Heap)的核心概述 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确
阅读全文
摘要:参考资料:尚硅谷JVM教程 5.1. 什么是本地方法? 简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C
阅读全文
摘要:参考资料:尚硅谷JVM教程 4.1. 虚拟机栈概述 4.1.1. 虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 4.1.2. 初步
阅读全文