JVM
文章平均质量分 88
coder_szc
倚天照海花无数,流水高山心自知。
展开
-
mac下下载安装mat
背景mat是一个用来分析JVM内存泄漏的工具(参见文章JVM学习笔记之GUI监控工具,内存泄漏参见文章JVM学习之垃圾回收和垃圾回收器),但是在MAC下的安装运行并不像windows上那么简单,本文对mat在mac下的下载安装做一个记录下载登录官网https://www.eclipse.org/mat/downloads.php,注意新版本的mat对jdk版本要求比较高,由于我的jdk为1.8,因此要在Previous Release中下载旧版本,比如1.10:https://mirrors.n原创 2021-08-14 13:14:18 · 3401 阅读 · 4 评论 -
JVM学习笔记之GC日志分析
目录背景GC日志参数常用参数其他参数GC日志格式日志分类MinorGCFullGCMinorGC日志解析FullGC日志解析GC日志分析工具GCEasy其他结语背景这是JVM学习笔记的最后一篇文章,分析一下GC日志,在JVM学习笔记之堆也分析了一次日志,但这次更加详细,不过如果对JVM堆的结构(年轻代、伊甸园区、老年代、元空间等)不熟悉的话,还是建议看看那篇文章GC日志参数在文章JVM学习笔记之运行时参数中提到了一些和GC相关的...原创 2021-04-10 09:29:17 · 945 阅读 · 5 评论 -
JVM学习笔记之运行时参数
目录背景JVM参数选项类型标准参数选项特点-server与-client-X参数选项特点各种选项JVM的JIT编译模式相关特别地-XX参数选项特点分类特别地添加JVM参数选项idea运行jar包程序运行过程中常用的JVM参数选项打印设置的XX选项及值-XX:+PrintFlagsInitial-XX:+PrintFlagsFinal-XX:+PrintCommandLineFlags-XX:+PrintVMOpt原创 2021-04-03 21:08:49 · 1292 阅读 · 0 评论 -
JVM学习笔记之GUI监控工具
目录背景jConsole本地连接:连接本地计算机一个正在运行的JVM进程远程连接:连接JMX代理高级连接:使用特殊的URL连接JMX代理VisualVM插件安装连接方式本地连接:连接本地计算机上的一个JVM进程远程连接:远程远程服务器上的某个JVM进程基本使用堆快照文件的生成与读取生成dump文件查看快照文件线程快照文件的生成与读取生成查看线程dump文件抽样CPU内存EclipseMAT获取和分析dump文件获取d原创 2021-03-27 13:27:50 · 1645 阅读 · 0 评论 -
JVM学习笔记之命令行监控工具
目录背景jps:查看正在运行的java进程-q参数:只显示pid-l:显示pid和主程序的全类名-m:显示pid、进程名和主函数启动参数:-v:显示pid、进程名和主函数启动的JVM参数:jstat:查看JVM统计信息option参数类装载相关的垃圾回收相关的JIT相关的interval参数count参数-t参数-h参数jinfo:实时查看和修改JVM参数与jps -v的区别查看参数jinfo -sysprops PIDjinf原创 2021-03-21 13:26:48 · 2667 阅读 · 0 评论 -
JVM学习之性能调优
目录背景调优三部曲发现问题排查问题解决问题测试指标响应时间吞吐量并发数内存占用相互间的关系背景从这儿开始JVM笔记的最后一部分——性能调优,包括调优工具(命令行工具、gui工具)、JVM参数、日志解析,本文则是一个开头调优三部曲发现问题GC频繁、CPU负载过高、OOM、内存泄漏、死锁、响应时间太长(ANR)排查问题1)、打印GC日志、通过GCViewer或者http://gceasy.io来分析2)、使用jstack、jmap...原创 2021-03-14 10:47:56 · 235 阅读 · 0 评论 -
JVM学习笔记之再谈类的加载器
目录背景概述类加载的分类学习类加载器的必要性命名空间类加载机制的基本特征类的加载器分类引导类加载器扩展类加载器系统类加载器用户自定义类加载器测试不同的类加载器ClassLoader源码解析ClassLoader的主要方法loadClass(String)findClass(String)defineClass(byte[], int, int)defineClass(String, byte[], int, int)SecureCl原创 2021-03-07 18:23:32 · 676 阅读 · 0 评论 -
JVM学习笔记之类的加载过程
背景阅读此文之前,可以先看看我之前笔记中关于类加载器子系统的章节,这篇笔记将详细描述类的各个加载过程,特别是类的初始化、主动加载和被动加载。概述java中的数据类型分为基本数据类型和引用数据类型,其中基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。按照JVM规范,从class文件到加载到内存中的类,到类卸载出内存为止,类的整个生命周期包括如下三个阶段:加载(Loading)阶段所谓加载,就是把java类的字节码文件加载到内存中,并在内存中构建出java类的原型——类原创 2021-02-22 16:48:22 · 580 阅读 · 0 评论 -
JVM学习笔记之字节码指令集
目录背景概述执行模型字节码与数据类型指令分类加载与存储指令再谈操作数栈与局部变量表局部变量压栈指令常量入栈指令出栈装入局部变量表指令算术指令所有算术指令比较指令的说明类型转换指令宽化类型转换窄化类型转换对象的创建与访问指令创建指令字段访问指令数组操作指令类型检查指令方法调用与返回指令方法调用指令方法返回指令操作数栈管理指令控制转移指令条件跳转指令比较条件跳转指令多条件分支跳转指令无条件跳转原创 2021-02-17 13:38:20 · 951 阅读 · 0 评论 -
JVM学习笔记之字节码文件结构
目录背景概述字节码文件的跨平台性java的前端编译器透过字节码指令看代码细节示例1示例2示例3class文件字节码指令查看方式class文件结构魔数:class文件标志class文件版本号常量池:存放所有常量访问标识类索引、父类索引、接口索引集合字段表集合方法表集合属性表集合用javap解析class文件结语背景在这个心想事不成的寒假里,还是学习宋红康的JVM视频,整理并发布笔记吧概述1.8版本的JVM官原创 2021-02-13 10:12:58 · 245 阅读 · 1 评论 -
JVM学习之垃圾回收和垃圾回收器
背景迟迟不开学,赋闲多日,学习新东西以打发时间,现在整理下JVM的最后一部分笔记——垃圾回收和垃圾回收器概述垃圾定义进程中没有任何指针指向的对象,是为垃圾为何需要GC为了方便JVM整理出内存分配给新的对象,不进行GC的话,内存迟早要被消耗完。早期垃圾回收C阶段,使用malloc、realloc、calloc函数申请内存,使用free函数释放内存C++阶段,使用new关键字申请内存,使用delete关键字释放内存Java的垃圾回收机制Java的自动内存管理,可以降低原创 2020-06-14 09:02:50 · 1550 阅读 · 0 评论 -
JVM学习笔记之StringTable
目录背景String基本特性不可变性值传递String的内存分配String的基本操作字符串拼接操作intern()的使用StringTable的垃圾回收G1中的String去重操作结语背景学了半天JVM,是时候复习一下String了String基本特性String是字符串final类,不可被继承;实现了Serializable接口和Comparable接口,表示可序列化和可比较大小jdk8及以前内部定义了final char[]来存储字符串,原创 2020-06-07 12:27:49 · 500 阅读 · 0 评论 -
JVM学习笔记之执行引擎
目录背景概述java代码编译和执行过程解释器与JIT编译器静态提前编译器AOT(Ahead Of Time)JIT编译器方法调用计数器和回边计数器方法调用计数器回边计数器设置程序执行方式server模式和client模式C1编译器C2编译器分层编译背景下面是JVM执行引擎的学习笔记,另外执行引擎的执行示例可以参见文章JVM学习笔记上(概述-本地方法栈)中操作数栈相关部分概述虚拟机的执行引擎是由软件自行实现的,能够执行那些不被硬件直接支持原创 2020-06-02 11:10:46 · 442 阅读 · 0 评论 -
JVM学习之直接内存
背景继续整理JVM的学习笔记概述直接内存不是虚拟机定义的内存空间,是直接向系统申请的内存空间,来源于NIO,通过存在堆中的DirrectByteBuffer操作Native内存。读写性能高,对于IO频繁的场景可以使用NIO。public class BufferTest { private static final int BUFFER = 1024 * 1024 * 1024; public static void main(String[] args) {原创 2020-06-01 17:04:35 · 206 阅读 · 0 评论 -
JVM学习之对象的实例化、内存布局与访问定位
目录背景对象实例化对象实例化的几种方式字节码角度查看对象创建过程对象实例化的步骤对象的内存布局对象的访问定位背景上周跟着做尚硅谷的电商数仓,好悬把我写吐了,JVM学习笔记因此一直没有更新,现在补上..对象实例化对象实例化的几种方式1)、new2)、Class.newInstance()3)、Constructor的newInstance()4)、clone()5)、反序列化6)、第三方库Objenesis字节码角度查看对象创建过程代原创 2020-06-01 08:41:48 · 370 阅读 · 0 评论 -
JVM学习笔记之方法区
目录背景栈、堆、方法区三者间的交互关系方法区的理解设置方法区大小与OOM方法区的内部结构方法区使用举例方法区演进细节方法区的GC总结背景整理一下关于JVM方法区的学习笔记,基于jdk8,所以方法区的实际实现都是堆中的元空间栈、堆、方法区三者间的交互关系三者在运行时数据区的中的分布如下图所示从是否线程私有的角度上看的关系如下图所示,其中元空间是数据区的实现三者的交互关系如下图所示其中的reference就是person变量,对象实例数原创 2020-05-21 10:08:12 · 305 阅读 · 0 评论 -
JVM学习笔记之堆
目录背景核心概述设置堆大小、OOM问题年轻代与老年代对象分配过程Minor GC、Major GC、Full GC堆空间分代思想内存分配策略TLAB堆参数设置小结堆不是分配对象的唯一选择结语背景整理一下这几天学习宋红康JVM上篇剩下部分的笔记,从堆到垃圾回收器从堆开始,测试内容都是基于jdk8的核心概述进程内唯一,线程共享,但可以划分线程私有缓冲区(Thread Local Allocation Buffer, TLAB)。堆在JVM启原创 2020-05-21 09:47:50 · 617 阅读 · 0 评论 -
JVM学习笔记上(概述-本地方法栈)
背景前一阵跟着宋红康的视频学了学JVM,视频没有更新完,所以也没学完,这里记录一下笔记JVM概述JVM位置: 运行在操作系统之上相对于java语言,JVM的位置如下所示对于安卓的Davlik虚拟机,他分布在安卓运行时内存区整体结构:以HotSpot VM为例,它采用解释器与即时编译器(JIT)并存的架构运行时数据区和执行引擎的交互...原创 2020-03-22 10:34:07 · 1970 阅读 · 0 评论