jvm
文章平均质量分 89
你好世界wxx
Just do it!
展开
-
第26章 分析GC日志
第26章 分析GC日志来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 GC日志参数2 GC日志格式2.1 GC分类针对HotSpot VM的实现,它里面的GC按照回收区域又可分为辆大众类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为新生代收集(Minor GC / Young GC):只有新生代(Eden\S0,S1)的垃圾收集老年代收集(Major GC / Old GC):只有老原创 2021-02-17 18:43:46 · 264 阅读 · 0 评论 -
第25章 JVM运行时参数
第25章 JVM运行时参数来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 JVM参数选项类型1.1 类型一:标准参数选项特点:比较稳定,后续版本基本不会变化,以-开头各种选项:运行java或者java -help可以看到所有的标准选项补充内充:-server与-clientHotspot JVM有两种模式,分别是server和client,分别通过-server和-client模式设置在32位Windows系统上,默认使用Client类型的JVM。要想使用Se原创 2021-02-16 23:28:34 · 179 阅读 · 0 评论 -
第24章 JVM监控及诊断工具-GUI篇
第24章 JVM监控及诊断工具-GUI篇来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 工具概述使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限:(1)无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间(这对定位应用性能瓶颈至关重要)。(2)要求用户登录到目标Java应用所在的宿主机上,使用起来不方便。(3)分析数据通过终端输出,结果展示不够直观。为此,JDK提供了一些内存泄露的分析工具,如jconsol原创 2021-02-13 23:09:55 · 515 阅读 · 0 评论 -
第23章 JVM监控及诊断工具-命令行篇
第23章 JVM监控及诊断工具-命令行篇来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 概述性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益。Java作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成Java应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。体会1:使用数据说明问题,使用知识分析问题,使原创 2021-02-12 17:48:40 · 401 阅读 · 1 评论 -
第22章 性能监控与调优概述
第22章 性能监控与调优概述来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 大厂面试题支付宝支付宝三面:JVM性能调优都做了什么?小米有做过JVM内存优化吗?从SQL、JVM、架构、数据库四个方面讲讲优化思路蚂蚁金服JVM的编译优化JVM性能调优都做了什么JVM诊断工具用过哪些?二面:JVM怎样调优,堆内存、栈空间设置多少合适三面:JVM相关的分析工具使用过哪些?具体的性能优化步骤如何?字节跳动三面:JVM如何调优、参数怎么调?原创 2021-02-10 21:03:36 · 198 阅读 · 0 评论 -
第21章 再谈类的加载器
第21章 再谈类的加载器来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 概述类加载器是JVM执行类加载机制的前提。ClassLoader的作用:ClassLoader是Java的核心组件,所有Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加原创 2021-02-06 13:10:24 · 205 阅读 · 1 评论 -
第20章 类的加载过程详解
第20章 类的加载过程详解来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 概述在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括7个阶段。其中,验证、准备、解析 3 个部分统称为链接(Linking)从程序中类的使用过程看:大厂面试题蚂蚁金服描述一下 JVM 加载 Class 文件的原理机制原创 2021-02-06 13:10:10 · 429 阅读 · 0 评论 -
第19章 字节码指令集与解析举例
第19章 字节码指令集与解析举例来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 概述Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器结构,所以大多数指令都不包含操作数,只有一个操作码。由于限制了Java虚拟机操作码的长度为一个字节(即0~255原创 2021-02-05 15:57:32 · 218 阅读 · 2 评论 -
第18章 Class文件结构
第18章 Class文件结构来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 概述作为Java程序员,为什么我们需要接触字节码文件?字节码文件的跨平台性Java语言:跨平台的语言(write once, run anywhere)当Java源代码成功编译成字节码后,如果想在不同平台运行,则无需再次编译这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等有强大的编译器跨平台似乎已经快成为一门语言必选的特性了Java虚拟机:跨语言的平台原创 2021-02-05 15:40:11 · 221 阅读 · 0 评论 -
第17章 垃圾回收器
第17章 垃圾回收器来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同的角度分析垃圾收集器,可以将GC分为不同的类型。查看Java不同版本的新特性,可以从三个层面分析:语法层面 :Lambda表达式、switch、自动装箱、自动拆箱、enum、<>、…API层面:Stream原创 2021-02-05 15:20:24 · 170 阅读 · 0 评论 -
第16章 垃圾回收相关概念
第16章 垃圾回收相关概念来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 System.gc()默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代以及方法区进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾回收器的调用。JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的原创 2021-02-05 15:07:46 · 99 阅读 · 0 评论 -
第15章 垃圾回收相关算法
第15章 垃圾回收相关算法来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 标记阶段:引用计数算法垃圾标记阶段:对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是死亡的对象。只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何存活对象继续引用时,就可以还盘为已经死亡。判断对原创 2021-02-05 15:02:30 · 143 阅读 · 1 评论 -
第14章 垃圾回收概述
第14章 垃圾回收概述来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 什么是垃圾Java = (C++)–垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要收集?什么时候回收垃圾?如何回收垃圾?垃圾回收机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小原创 2021-02-05 14:54:38 · 97 阅读 · 0 评论 -
第13章 StringTable
第13章 StringTable来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 String的基本特性String:字符串,使用一对""引起来表示。String s1 = “Hello”; // 字面量定义方式String s2 = new String(“Hello”);String声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小原创 2021-02-05 14:52:53 · 73 阅读 · 0 评论 -
第12章 执行引擎
第12章 执行引擎来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件限制地定制指令集和执行引擎的体系结构,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能直接运行在操作系统之原创 2021-02-05 14:45:44 · 288 阅读 · 0 评论 -
第11章 直接内存(Direct Memory)
第11章 直接内存(Direct Memory)来自尚硅谷宋红康老师讲解的JVM:bilibili链接不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存空间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。/** * IO NIO (New IO / Non-Blocking IO) * byte[] / char[] Bu原创 2021-02-05 14:41:02 · 133 阅读 · 1 评论 -
第10章 对象的实例化内存布局与访问定位
第10章 对象的实例化内存布局与访问定位1 对象的实例化面试题美团对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服二面:java对象头里有什么?创建对象的步骤判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以原创 2021-02-05 14:38:05 · 92 阅读 · 0 评论 -
第9章 方法区
第9章 方法区来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 栈、堆、方法区的交互关系运行时数据区结构图2 方法区的理解官方定义方法区在哪里?《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会去进行垃圾收集或者进行压缩。”但是对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看做是一块独立于Java堆的内存空间。方法区的基本理解方法原创 2021-02-04 15:04:45 · 181 阅读 · 0 评论 -
第8章 堆
第8章 堆来自尚硅谷宋红康老师讲解的JVM:bilibili链接整个系列学习路线1 堆的核心概述每个进程对应一个JVM实例,对应一个Runtime;一个进程对应多个线程,一个线程对应一个程序计数器、虚拟机栈、本地方法栈。一个进程中的线程要共享堆空间和方法区一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域,演示如下:/** * -Xms10m -Xmx10m */public class HeapDemo { public static void原创 2021-02-04 14:55:47 · 166 阅读 · 0 评论 -
第7章 本地方法栈
第7章 本地方法栈来自尚硅谷宋红康老师讲解的JVM:bilibili链接原创 2021-02-04 14:45:20 · 72 阅读 · 0 评论 -
第6章 本地方法接口
第6章 本地方法接口来自尚硅谷宋红康老师讲解的JVM:bilibili链接什么是本地方法?简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其他的编译语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。“A native method is a Java method whose im原创 2021-02-04 14:43:35 · 65 阅读 · 0 评论 -
第5章 虚拟机栈
第5章 虚拟机栈来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 虚拟机栈概述官网:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.2虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是扩平台,指令集小,编译器容易实现;缺点是性能下降,实现同样的功能需要更多的指令。初步印象:有不少Java开发原创 2021-02-04 14:42:28 · 110 阅读 · 0 评论 -
第4章 程序计数器(PC寄存器)
第4章 程序计数器(PC寄存器)来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 PC Register介绍虚拟机规范:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.1PC寄存器是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的内存区域。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,原创 2021-02-04 14:31:33 · 238 阅读 · 0 评论 -
第3章 运行时数据区
第3章 运行时数据区1 概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。GC调优95%都在堆区,5%在方法区(JDK8之前叫做永久代,JDK8及以后叫做元空间)2 线程线程是一个程序里的运行单元。JVM允许一个应用有多个线程原创 2021-02-04 14:29:12 · 85 阅读 · 0 评论 -
第2章 类加载子系统
第2章 类加载子系统来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 内存结构概述简图详细图(英文版)详细图(中文版)类加载器子系统运行时数据区执行引擎等如果自己手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器和执行引擎2 类加载器与类的加载过程类加载器子系统作用类加载器子系统作用负责从文件系统或者网络中加载Class文件,class文件在文件开头会有特定的文件标识。ClassLoader只负责class文件原创 2021-02-04 14:27:03 · 136 阅读 · 0 评论 -
第1章 JVM和Java体系结构
第1章 JVM和Java体系结构来自尚硅谷宋红康老师讲解的JVM:bilibili链接1 前言你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,却无从下手新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就JJ了每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优JVM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除会在项目中使用到与Java平台相关原创 2021-02-04 14:15:30 · 140 阅读 · 0 评论