
java jvm
文章平均质量分 94
jvm
吴法刚
从现在我下了一个决定把自己学习过的东西都写成文章发表出来,大家共同学习共同探讨,知识无边界。。欢迎交流技术
展开
-
jvm_下篇_补充_MAT从入门到精通
尽管JVM提供了自动内存管理的机制,试图降低程序员的开发门槛,确实也实现了这一目标,在日常开发中,我们一般都不需要关心对象的内存释放。JVM大部分都是使用trace算法来判断一个对象是否该被回收,那么JVM只能回收那些从gc roots不可达的对象。如果我们在使用某些大的对象、集合对象或者一些三方包里的资源,忘记及时释放资源的话,还是会造成JVM的内存泄漏或内存浪费的问题。原创 2023-12-25 07:48:48 · 982 阅读 · 0 评论 -
jvm_下篇_补充:使用 OQL 语言查询对象信息
同步更新:https://gitee.com/vectorx/NOTE_JVM。原创 2023-12-25 07:47:50 · 1217 阅读 · 0 评论 -
jvm_下篇_补充:浅堆深堆与内存泄露
同步更新:https://gitee.com/vectorx/NOTE_JVM。原创 2023-12-25 07:47:13 · 1259 阅读 · 0 评论 -
JVM_下篇_第五章:GC日志分析
[GC (Allocation Failure) [PSYoungGen: 2047K->504K(2560K)] 2047K->868K(9728K), 0.0068657 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] GC:表明进行了一次垃圾回收,前面没有Full修饰,表明这是一次Minor GC ,注意它不表示只GC新生代,并且现有的不管是新生代还是老年代都会STW。Allocation Failure:表明本次引起GC的原.原创 2023-12-25 07:46:23 · 1248 阅读 · 1 评论 -
jvm_下篇_第四章:JVM 运行时参数
Java 提供了 java.lang.management 包用于监视和管理 Java 虚拟机和 Java 运行时中的其他组件,它允许本地或远程监控和管理运行的 Java 虚拟机。通过使用这些 api,可以监控应用服务器的堆内存使用情况,设置一些阈值进行报警等处理。Hotspot JVM 有两种模式,分别是 server 和 client,分别通过-server 和-client 模式设置。同样地,通过 java -version 命令:可以看到 mixed mode 字样,代表当前系统使用的是混合模式。原创 2023-12-25 07:45:59 · 893 阅读 · 0 评论 -
jvm_下篇_第三章:JVM 监控及诊断工具-GUI 篇
1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。2.要求用户登录到目标 Java 应用所在的宿主机上,使用起来不是很方便。3.分析数据通过终端输出,结果展示不够直观。为此,JDK 提供了一些内存泄漏的分析工具,如 jconsole,jvisualvm 等,用于辅助开发人员定位问题,但是这些工具很多时候并不足以满足快速定位的需求。所以这里我们介绍的工具相对多一些、丰富一些。JDK 自带的工具。原创 2023-12-25 07:45:21 · 1159 阅读 · 0 评论 -
jvm_下篇_第二章:JVM 监控及诊断工具-命令行篇
性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络 I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。体会 1:使用数据说明问题,使用知识分析问题,使用工具处理问题。体会 2:无监控、不调优!简单命令行工具。原创 2023-12-25 07:44:51 · 1249 阅读 · 0 评论 -
jvm_下篇_第一章:概述篇
支付宝三面:JVM 性能调优都做了什么?有做过 JVM 内存优化吗?从 SQL、JVM、架构、数据库四个方面讲讲优化思路JVM 的编译优化jvm 性能调优都做了什么JVM 诊断调优工具用过哪些?二面:jvm 怎样调优,堆内存、栈空间设置多少合适三面:JVM 相关的分析工具使用过的有哪些?具体的性能调优步骤如何如何进行 JVM 调优?有哪些方法?如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决?三面:JVM 如何调优、参数怎么调?从 SQL、JVM、架构、数据库四个方面讲讲优化思路。原创 2023-12-25 07:44:08 · 776 阅读 · 0 评论 -
javassist 入门以及dubbo中的使用案例
学习javassite 不得不提的javaagent 技术,字节码插桩 如果不太了解的可以参考Javaagent入门这一篇文章自己有一个简单的大致了解Javassist是一个开源的分析、编辑和创建Java字节码的类库。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成Javassist 应用场景:监控、动态代理dubbo、myBatis、Spring 都有不同程度的应用。原创 2023-06-10 14:20:19 · 1291 阅读 · 0 评论 -
javaagent入门
javaagent入门JVM启动前静态InstrumentJavaagent 是什么?如何使用javaagent?1.首先来实现javaagent工程。写给测试项目JVM启动后动态Instrument总结instrument原理启动时加载instrument agent过程:运行时加载instrument agent过程:Instrumentation的局限性javaagent使用指南今天打算写一下 Javaagent,一开始我对它的概念也比较陌生,知道大神写mybatis重sql打印的时候知道有这么一原创 2021-10-23 09:19:05 · 704 阅读 · 0 评论 -
jvm中篇-第四章-再谈类的加载器
jvm中篇-07-再谈类的加载器1. 概述1.1. 大厂面试题1.2. 类加载器的分类1.3. 类加载器的必要性1.4. 命名空间1.5. 类加载机制的基本特征1.6. 类加载器之间的关系2. 类的加载器分类2.1. 引导类加载器2.2. 扩展类加载器2.3. 系统类加载器2.4. 用户自定义类加载器3. 测试不同的类的加载器4. ClassLoader源码解析4.1. ClassLoader的主要方法4.2. SecureClassLoader与URLClassLoader4.3. ExtClassLoa原创 2021-08-26 08:37:33 · 186 阅读 · 0 评论 -
jvm中篇-第三章-类的加载过程详解
jvm中篇-06-类的加载过程详解1. 概述过程一:Loading(加载)阶段1. 加载完成的操作2. 二进制流的获取方式3. 类模型与Class实例的位置4. 数组类的加载过程二:Linking(链接)阶段1. Verification(验证)2. Preparation(准备)3. Resolution(解析)二级目录三级目录1. 概述在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载按照Java虚拟机规范,从class文件到加载到内存原创 2021-08-15 22:58:49 · 1064 阅读 · 0 评论 -
jvm中篇-第二章:字节码指令集与解析
jvm中篇-05-字节码指令集与解析1.概述1.1 执行模型1.2 字节码与数据类型1.3 字节码分类2.加载与存储指令2.1 再谈操作数栈与局部变量表2.2 局部变量压栈指令2.3 常量入栈指令1.概述Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于 Java虚拟机采用面向操作数栈而不是寄存器的结构,原创 2021-07-14 13:24:33 · 1352 阅读 · 1 评论 -
jvm中篇-第一章-Javap指令解析class文件
jvm中篇-04-Javap指令解析class文件解析字节码的作用javac -g 操作javap 的具体用法使用举例小结解析字节码的作用通过反编译生成的字节码文件,我们可以深入的了解java代码的工作机制。但是,自己分析类文件结构太麻烦了!除了使用第三方的jclasslib工具之外,oracle官方也提供了工具:javap。javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区 (字节码指令)、局部变量表、异常表和代码行偏移量映射表、常量池等信息。原创 2021-06-20 11:48:18 · 1661 阅读 · 0 评论 -
jvm中篇-第一章-class文件结构
jvm中篇-03-class文件结构解读字节码指令的三种方式字节码文件里是什么?什么是字节码指令(byte code)?class文件结构概述魔数-class文件的标志class文件版本号常量池:存放所有的常量常量池概述4.访问标志5.类索引,父类索引,接口索引集合6.字段表集合6.1 fields_count (字段计数器)**6.2 fields[] (字段表)6.2.1 字段访问标识6.2.2 字段名索引6.2.3 描述符索引6.2.4 属性表集合7.方法表集合8.属性表集合9.小结解读字节码指原创 2021-06-20 10:38:31 · 1589 阅读 · 0 评论 -
JVM_12 垃圾回收3-垃圾回收器
1. GC的分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。1.1 按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。➢在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器原创 2020-09-18 05:31:52 · 1874 阅读 · 0 评论 -
JVM_11 垃圾回收2-垃圾回收相关概念
JVM_11 垃圾回收2-垃圾回收相关概念1. System.gc()的理解2.内存溢出与内存泄漏2.1 内存溢出2.2 内存泄漏(Memory Leak)2.3 举例3. Stop The World3.1测试代码4. 垃圾回收的并行与并发4.1并发(Concurrent)4.2 并行(Parallel)4.3 二者对比4.4 垃圾回收的并发与并行5. 安全点与安全区域5.1 安全点(Safepoint)5.2 安全区域(Safe Region)6.引用6.1 强引用: 不回收6.2 软引用: 内存不足即原创 2020-09-18 05:10:36 · 1555 阅读 · 0 评论 -
JVM_10 垃圾回收1-概述+相关算法
1.概述1.1 什么是垃圾?什么是垃圾( Garbage) 呢? ➢垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 ➢外文: An object is considered garbage when it can no longer be reached from any pointer in the runningprogram.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存原创 2020-09-11 19:23:07 · 1745 阅读 · 0 评论 -
JVM_09 字符串常量池StringTable
1.2字符串常量池中是不会存储相同内容的字符串的。String的String Pool 是一个固定大小的Hashtable,默认值大小长度是1009。如果放进StringPool的String非常多, 就会造成Hash冲突严重,从而导致链表会很长,而链表长了后直接会造成的影响就是当调用String. intern时性能会大幅下降。使用一XX: StringTableSize可设置StringTable的长度在jdk6中StringTable是固定的,就是1009的长度,所以如果常量池中的字符串过多就原创 2020-09-11 04:45:45 · 1542 阅读 · 0 评论 -
JVM_08 执行引擎(Execution Engine)
1. 执行引擎概述执行引擎是Java虚拟机的核心组成部分之一虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字原创 2020-09-08 18:49:42 · 1827 阅读 · 0 评论 -
JVM_07 运行时数据区4-对象的实例化内存布局与访问定位+直接内存
大厂面试题?美团:对象在jvm 中怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:二面: java对象里面有什么?1.对象的实例化1.1 创建对象的方式new最常见的方式变形1 : Xxx的静态方法变形2 : XxBuilder/XxoxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clon原创 2020-09-06 17:13:17 · 1641 阅读 · 0 评论 -
JVM_06 运行时数据区3-方法区
1. 堆、栈、方法区的交互关系原创 2020-09-06 15:18:31 · 1564 阅读 · 0 评论 -
JVM_05 运行时数据区2-堆
1.核心概述一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的)– 堆空间大小可以调节《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的所有的线程共享java堆,在这里还可以划分线程私有的原创 2020-09-05 19:51:36 · 1617 阅读 · 0 评论 -
JVM_04 本地方法接口
本地方法简单来讲,一个Native Method就是一个java调用非java代码的接口,一个Native Method 是这样一个java方法:该方法的实现由非Java语言实现,比如C。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去调用一个C的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。本地接口的作用是融合不同的编原创 2020-09-02 19:29:13 · 1641 阅读 · 0 评论 -
JVM_03 运行时数据区1-[程序寄存器+虚拟机栈+本地方法栈]
1. 内存 与 线程1.1 内存内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和.原创 2020-09-02 19:28:32 · 1773 阅读 · 0 评论 -
JVM_02 类加载子系统
类加载器分类原创 2020-08-29 14:56:56 · 1653 阅读 · 2 评论 -
idea 安装 jclasslib
插件安装安装完成重启重启后原创 2020-08-29 13:55:10 · 3004 阅读 · 0 评论