JVM
文章平均质量分 94
Java虚拟机相关学习笔记
小幸运安然
这个作者很懒,什么都没留下…
展开
-
二十一、JVM可视化监控工具
一、概述1、命令行工具的缺陷1、使用命令行工具或组合能获取目标Java应用性能相关的基础信息,但存在以下缺陷:无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等。需要登录到目标Java应用所在的服务器上,使用不方便。分析数据通过终端输出,结果展示不直观。2、图形化诊断工具1、JDK自带的工具jconsole:JDK自带的可视化监视工具,查看Java应用程序的运行概况、监控堆信息、永久区(元空间)使用情况、类加载情况等。在JDK的bin目录下原创 2022-02-28 16:08:24 · 2753 阅读 · 0 评论 -
二十、JVM命令行监控工具
一、概述1、导致出现性能问题的因素1、线程控制2、磁盘读写3、数据库访问4、网络I/O5、垃圾收集2、为什么需要调优1、防止出现OOM《关于OOM可以参考》2、解决OOM3、减少Full GC出现的频率3、性能优化的步骤1、性能监控一种以非强行或者入侵方式收集或查看应用运营性能数据的操作。监控通常是指一种在生产、质量评估或者开发环境下实施的带有预防或主动性的操作。当应用出现性能问题却没有足够多的线索时,首先需要进行性能监控,再进行性能分析。通常发现的原创 2022-02-28 15:11:28 · 577 阅读 · 0 评论 -
十九、ClassLoader与双亲委派机制的补充
一、概述1、说明本篇是对《类加载子系统》的补充。2、ClassLoader的作用ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的链接和初始化行为。原创 2022-01-05 14:53:04 · 429 阅读 · 0 评论 -
十八、类加载过程详细说明
一、前言1、本篇是对《类加载子系统》的补充。2、在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。二、加载阶段(Loading)1、对加载的理解1、加载(Loading)阶段是整个类加载(Class Loading)过程中的一个阶段。2、加载就是将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型——类模板对象。3、类模板对象其实就是Java类在JVM内存中的一个快照,JVM将从字节码文件中解析出的常原创 2022-01-02 16:32:43 · 756 阅读 · 0 评论 -
十七、字节码指令
一、字节码指令概述1、概述1、Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行命令。2、Java虚拟机的指令由1个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的0至多个代表此操作所需参数(称为操作数,Operand)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码,指令惨数都存放在操作数栈中。3、字节码指令集可算是一种具有鲜明特点、优势和劣势均很突出的指令集架构,由于限制了Java虚拟机原创 2021-12-13 23:29:45 · 1984 阅读 · 0 评论 -
十六、Class文件结构下篇
一、Class文件结构之方法表集合1、概述1、methods:指向常量池索引集合,它完整描述了每个方法的签名。在字节码文件中,每一个method_info项都对应着一个类或者接口中的方法信息。比如方法的访问修饰符(public、private或protected),方法的返回值类型以及方法的参数信息等。2、methods表只描述当前类或接口中声明的方,不包括从父类或父接口继承的方法。3、methods表有可能会出现由编译器自动添加的方法,最典型的便是编译器产生的方法信息(比如:类(接口)初始化方法原创 2021-11-21 20:39:45 · 739 阅读 · 0 评论 -
十五、Class文件结构上篇
一、Java虚拟机概述1、Java虚拟机跨语言的平台1、Java 虚拟机不和包括Java在内的任何语言绑定,它只与"Class文件"这种特定的二进制文件格式所关联。无论使用何种语言进行软件开发,只要将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行。可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁。所有的JVM全部遵守Java虚拟机规范,也就是说所有的JVM环境都是一样的,这样一来字节码文件可以在各种JVM上运行。2、想要让一个Java程序正确地运行原创 2021-11-20 23:22:53 · 1998 阅读 · 7 评论 -
十四、垃圾回收器下篇
一、CMS回收器(低延迟)1、CMS回收器概述1、CMS(Concurrent Mark Sweep)收集器是HosSpot虚拟机中第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程同时工作。2、CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间。停顿时间越短(低延迟)就越适合与用户交互的程序,良好的响应速度能提升用户体验。3、目前很大一部分的Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上,这类应用通常都会较为 关注服务的响应速度,希望系统停顿时间尽可原创 2021-10-28 18:08:07 · 178 阅读 · 0 评论 -
十三、垃圾回收器上篇
一、GC分类与性能指标1、垃圾回收器概述1、垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。2、由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。3、从不同角度分析垃圾收集器,可以将GC分为不同的类型。4、垃圾收集器分类:按线程数分(垃圾回收线程数),可以分为串行垃圾回收器和并行垃圾回收器。按照工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器。按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器。原创 2021-10-12 23:50:36 · 173 阅读 · 0 评论 -
十二、垃圾回收的一些概念
一、System.gc()的理解1、System.gc()方法概述1、在默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。2、调用System.gc()无法保证对垃圾收集器的调用(不能确保立即生效)。3、一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则太过麻烦了。2、尝试手动触发GCpublic class SystemGCTest { pu原创 2021-10-07 16:15:26 · 2088 阅读 · 0 评论 -
十一、垃圾回收概述与相关算法
一、垃圾回收概述1、前言1、Java和C++语言的区别,就在于垃圾收集技术和内存动态分配上,C没有垃圾收集技术,需要手动收集。垃圾收集机制是Java的招牌能力,极大的提高了开发效率。2、什么是垃圾(Garbage)1、垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。2、如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占用的内存空间会一直保留到应用程序的结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出。3、为什么需要GC1、对于高级语言来说,一原创 2021-10-02 17:12:10 · 355 阅读 · 0 评论 -
十、StringTable
一、String的基本特性1、String的特性1、String:字符串,使用一对""引起来表示。字面量的定义方式:String s1 = "hello";类的构造定义方式:String s2 = new String("hello");2、String声明为final的,不可被继承。3、String实现了Serializable接口:表示字符串是支持序列化的。4、实现了Comparable接口:表示字符串可以比较大小。5、String在JDK8及之前内部定义了final ch原创 2021-09-23 18:12:24 · 167 阅读 · 0 评论 -
九、执行引擎
一、执行引擎概述1、执行引擎概述1、执行引擎是Java虚拟机核心的组成部分之一。2、“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执 行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。3、执行引擎位置:属于JVM的下层,里面包含:解释器、即时编译器、垃圾回收器。4、JVM的主要任务是负责装载字节码到其内部,但字原创 2021-09-20 23:33:18 · 332 阅读 · 2 评论 -
八、探秘HotSpot虚拟机对象与直接内存
一、对象的创建1、创建对象的几种方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法。Class的newInstance方法:反射的方式,在JDK9中被标记为过时的方法,因为只能调用空参的构造方法,权限必须是public。Constructor的newInstance(xxx):反射的方式,可以调用空参、有参的构造器,任意权限。clone():不调用任何构造器,当前类需要实现Cloneable接口,实现clone()方法。原创 2021-09-12 23:53:34 · 286 阅读 · 0 评论 -
七、方法区
一、方法区的理解1、栈、堆、方法区的交互关系从内存结构上看:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zf0Cfbym-1631460810730)(images\img7\1.png)]从线程共享与否的角度上看:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v85SoF3C-1631460810735)(images\img7\2.png)]对象的访问定位:1、Person类的.class信息存放在元空间或方法区(运行时常原创 2021-09-12 23:48:21 · 179 阅读 · 0 评论 -
六、Java堆
一、堆的核心概述1、概述1、堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。2、一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。3、Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。4、《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。5、所有的线程共享Java堆,在这里还可以划分线程私有的原创 2021-09-12 23:31:13 · 1587 阅读 · 0 评论 -
五、本地方法接口和本地方法栈
一、本地方法接口1、本地方法解释简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知C++编译器去调用一个C的函数。“A native method is a Java method whose implementation is provided by non-jav原创 2021-09-06 14:29:41 · 150 阅读 · 0 评论 -
四、虚拟机栈
一、虚拟机栈概述1、虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同的平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。2、内存中的堆与栈栈是运行时的单位,而堆是存储的单位。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放哪里3、Java虚拟机栈Java虚拟机栈(Java Virtual Machine S原创 2021-09-06 14:04:19 · 161 阅读 · 0 评论 -
三、运行时数据区域概述
一、运行时数据区1、概述运行时数据区:它是在类加载完成后的阶段当我们通过前面的:类的加载 -> 验证 -> 准备 -> 解析 -> 初始化,这几个阶段完成后,就会用到执行引擎对类进行使用,同时执行引擎将会使用到运行时数据区2、运行时数据区完整图内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机原创 2021-08-31 16:15:08 · 495 阅读 · 0 评论 -
二、类加载子系统
一、类加载子系统概述1、图解英文结构图中文结构图2、类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,Class文件在文件开头有特定的文件标识。ClassLoader只负责Class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。原创 2021-08-29 23:03:36 · 206 阅读 · 0 评论 -
一、Java虚拟机概述与JVM结构
一、虚拟机与Java虚拟机1、字节码我们平时说的Java字节码,指的是用Java语言编译成的字节码。准确的说任何能在JVM平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式—Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。2、虚拟机1、所谓原创 2021-08-16 18:00:50 · 249 阅读 · 0 评论