![](https://img-blog.csdnimg.cn/20210923003853151.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
文章平均质量分 71
JVM
CodingALife
这个作者很懒,什么都没留下…
展开
-
JVM基础(十二):JVM的Xms和Xmx参数设置为相同值
·原创 2022-03-22 10:33:14 · 2527 阅读 · 0 评论 -
JVM性能调优(九):OOM案例
`原创 2021-11-14 17:59:47 · 1084 阅读 · 0 评论 -
Java内存分配的原理
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java VirtualMachine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与...转载 2021-01-03 21:22:20 · 290 阅读 · 0 评论 -
常量池 VS 运行时常量池 VS 字符串常量池
一.前言最近在看JVM, 常量池, 运行时常量池,字符串常量池 这个看的有点懵. 整理一下.class常量池是在编译的时候每个class都有的. 在编译阶段,存放的是常量的符号引用。[在class文件中.]字符串常量池在每个VM中只有一份,存放的是字符串常量的引用值。[在堆中.]运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时...转载 2021-04-12 22:29:08 · 485 阅读 · 0 评论 -
Java程序在内存中运行详解
Java语言是一门编译型语言,需要将编写的源代码(.java文件)编译之后(.class字节码文件),通过 jvm 才能正常的执行,下面的内容记录了一个程序从编写到执行整个过程在内存中是怎么一个变的。一、JVM的内存分布先了解下 JVM 的内存分布,因为Java程序想要运行,就要依靠 JVM,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM 实现了Java 的平台无关性,由此可见JVM的重要性。所以在学习 Java 内存分配原理的时候一定要牢记这一切都是在 JVM 中进行的,JVM 是内存转载 2021-01-03 21:08:05 · 2085 阅读 · 0 评论 -
JVM实战(十一):Full GC导致频繁卡死的优化实战
`2、原创 2021-10-30 02:14:13 · 2883 阅读 · 2 评论 -
JVM实战(一):Java代码到底是如何运行起来的
1、Version:0.9 StartHTML:0000000105 EndHTML:0000000343 StartFragment:0000000141 EndFragment:0000000303的Java代码到底是如何运行起来的原创 2021-10-27 16:24:10 · 1782 阅读 · 4 评论 -
Linux(十一):平均负载与CPU使用率
01 uptime命令通常我们发现系统变慢时,我们都会执行top或者uptime命令,来查看当前系统的负载情况,比如像下面,我执行了uptime,系统返回的了结果。[root@lincoding ~]# uptime 08:31:49 up 27 min, 1 user, load average: 0.07, 0.04, 0.00前几列的信息,相信大家都很熟悉,它们分别是当前时间、系统运行时间和正在登陆的用户个数,最后一个就是系统平均负载的情况。08:31:49原创 2020-12-31 12:58:53 · 475 阅读 · 0 评论 -
JVM实战(三):什么情况下JVM内存中的一个对象会被垃圾回收
1、什么情况下JVM内存中的一个对象会被垃圾回收2、JVM中有哪些垃圾回收算法,每个算法各自的3、年轻代和老年代分别适合什么样的垃圾回收算4、JVM中都有哪些常见的垃圾回收器,各自的特5、“Stop the World”问题分析:JVM最让人无奈的痛点! ...原创 2021-10-27 21:46:59 · 955 阅读 · 0 评论 -
JVM实战(二):JVM分代模型:年轻代、老年代、永久代
1、原创 2021-10-27 17:45:29 · 1914 阅读 · 2 评论 -
JVM基础(十二):Java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
目录1、java中的变量与数据类型2、思考3、例子:3.1、分析:3.2、结论1、java中的变量与数据类型变量是一个容器,用来装什么的呢?装内存地址,这个内存地址对应的是内存中某个数据。那为什么这个容器不直接装这个数据更简洁呢?因为直接装数据的话,这个数据就无法被别的变量使用,无法复用就会导致很多不便。所以变量的内存分配可以看成两个不部分:1、变量在内存中的分配(“变量分配”) 2、变量所引用的数据在内存中的分配(“数据分配”)1.1、变量类型有:局部:在.转载 2021-03-14 22:26:56 · 3462 阅读 · 6 评论 -
JVM性能调优(七):MAT的使用
目录1、MAT使用场景2、代码3、获取jvm进程的dump快照文件4、使用MAT分析内存快照1、MAT使用场景用于定位到系统里到底是什么样的对象太多了,占用了过多的内存。2、代码public class Demo3 { public static void main(String[] args) throws InterruptedException { List<Data> list = new ArrayList&...原创 2021-09-15 21:32:30 · 243 阅读 · 0 评论 -
深入理解Java Class文件格式(十)
深入理解Java Class文件格式(九)_mingyuli的博客-CSDN博客转载 2021-09-20 23:53:55 · 102 阅读 · 0 评论 -
深入理解Java Class文件格式(十一)
Class文件格式总结_昨夜星辰的博客-CSDN博客转载 2021-09-21 00:27:51 · 88 阅读 · 0 评论 -
深入理解Java Class文件格式(九)
深入理解Java Class文件格式(八)_昨夜星辰的博客-CSDN博客转载 2021-09-13 20:55:44 · 119 阅读 · 0 评论 -
深入理解Java Class文件格式(八)
深入理解Java Class文件格式(七)_昨夜星辰的博客-CSDN博客转载 2021-09-13 20:55:10 · 76 阅读 · 0 评论 -
深入理解Java Class文件格式(七)
写在前面一个class文件的总体概览。表格的内容如下:1、class文件中的访问标志信息位于常量池下面的2个字节是access_flags 。 access_flags 描述的是当前类(或者接口)的访问修饰符如public、private等。还存在一个标志位, 标志当前的这个class描述的是类还是接口。access_flags 的信息比较简单, 下面列出access_flags 中的各个标志位的信息。类型不能被super关键字修饰啊, 那这个A...转载 2021-09-13 20:46:58 · 341 阅读 · 0 评论 -
深入理解Java Class文件格式(六)
写在前面前文讲解了常量池中的7种数据项, 它们分别是:CONSTANT_Utf8_infoCONSTANT_NameAndType_infoCONSTANT_Integer_infoCONSTANT_Float_infoCONSTANT_Long_infoCONSTANT_Double_infoCONSTANT_String_info8)、CONSTANT_Class_info常量池中的一个 CONSTANT_Class_info,可以看做是CONSTANT_...转载 2021-09-13 20:21:43 · 494 阅读 · 0 评论 -
深入理解Java Class文件格式(五)
常量池中各数据项类型详解3)CONSTANT_Integer_info一个常量池中的 CONSTANT_Integer_info 数据项, 可以看做是CONSTANT_Integer类型的一个实例。 它存储的是源文件中出现的int型数据的值。 同样, 作为常量池中的一种数据类型, 它的第一个字节也是一个tag值, 它的tag值为3, 也就是说, 当虚拟机读到一个tag值为3的数据项时, 就知道这个数据项是一个CONSTANT_Integer_info, 它存储的是int型数值的值。 ...转载 2021-09-13 17:58:36 · 233 阅读 · 0 评论 -
深入理解Java Class文件格式(四)
1、常量池中各数据项类型详解 本文详细讲解常量池中的11种数据类型, 深度剖析源文件中的各种信息是以什么方式存放在常量池中的。我们知道, 常量池中的数据项是通过索引来引用的, 常量池中的各个数据项之间也会相互引用。在这11种常量池数据项类型中, 有两种比较基础, 之所以说它们基础, 是因为这两种类型的数据项会被其他类型的数据项引用。 这两种数据类型就是CONSTANT_Utf8 和 CONSTANT_NameAndType , 其中CONSTANT...转载 2021-09-13 16:45:36 · 424 阅读 · 0 评论 -
深入理解Java Class文件格式(三)
写在前面特殊字符串出现在class文件中的常量池中,特殊字符串包括三种: 类的全限定名, 字段和方法的描述符, 特殊方法的方法名。 下面我们就分别介绍这三种特殊字符串。1) 类的全限定名在常量池中, 一个类型的名字并不是我们在源文件中看到的那样, 也不是我们在源文件中使用的包名加类名的形式。 源文件中的全限定名和class文件中的全限定名不是相同的概念。源文件中的全新定名是包名加类名, 包名的各个部分之间,包名和类名之间, 使用点号分割。 ...转载 2021-09-13 16:20:02 · 1405 阅读 · 0 评论 -
深入理解Java Class文件格式(二)
写在前面对于理解JVM和深入理解Java语言, 学习并了解class文件的格式都是必须要掌握的功课。 原因很简单, JVM不会理解我们写的Java源文件, 我们必须把Java源文件编译成class文件, 才能被JVM识别, 对于JVM而言, class文件相当于一个接口, 理解了这个接口, 能帮助我们更好的理解JVM的行为;另一方面, class文件以另一种方式重新描述了我们在源文件中要表达的意思, 理解class文件如何重新描述我们编写的源文件, 对于深入理解Java语言和语法都是很有...转载 2021-09-13 16:01:50 · 219 阅读 · 0 评论 -
深入理解Java Class文件格式(一)
Java虚拟机到底是什么转载 2021-09-13 15:29:46 · 1958 阅读 · 0 评论 -
JVM基础(八三):Java类初始化和实例化
写在前面每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这个异常背后涉及到的是Java技术体系中的类加载机制。本文简述了JVM三种预定义类加载器,即启动类加载器、扩展类加载器和系统类加载器,并介绍和分析它们之间的关系和类加载所采用的双亲委派机制,给出并分析了与Java类加载原理相关的若干问题。一、Java 虚拟机类加载器结构简述1、JVM三种预定义类型类加载器当JVM启动的时候,Java开始使用如下三种类型的类加载器:...转载 2021-09-12 16:08:38 · 438 阅读 · 0 评论 -
JVM基础(八四):Java类加载原理解析
写在前面每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这个异常背后涉及到的是Java技术体系中的类加载机制。本文简述了JVM三种预定义类加载器,即启动类加载器、扩展类加载器和系统类加载器,并介绍和分析它们之间的关系和类加载所采用的双亲委派机制,给出并分析了与Java类加载原理相关的若干问题。一、Java 虚拟机类加载器结构简述1、JVM三种预定义类型类加载器当JVM启动的时候,Java开始使用如下三种类型的类加载器:启...转载 2021-09-12 16:07:48 · 200 阅读 · 0 评论 -
JVM基础(八二):Java类初始化和实例化
写在前面 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化(即类实例化之前必须初始化)。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。 一个Java对象的创建过程往往包括类初始化和类实例化两个阶段。一、Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被...转载 2021-09-12 00:39:18 · 557 阅读 · 0 评论 -
JVM目录结构
1、宋红康老师笔记【https://blog.csdn.net/mingyuli/article/details/120090351】2、JVM基础【Java虚拟机9:Java类加载机制_mingyuli的博客-CSDN博客】3、JVM调优【https://blog.csdn.net/mingyuli/article/details/110290060】...原创 2021-09-10 11:14:34 · 193 阅读 · 0 评论 -
JVM宋红康(二): JVM与Java体系结构
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)参考:https://www.yuque.com/u21195183/jvm/zq4x30原创 2021-09-03 21:13:19 · 482 阅读 · 0 评论 -
JVM宋红康(一): 学习总结
上篇:JVM与Java。系结构中篇:字节码与类的加载下篇:性能监控与调优原创 2021-09-03 21:10:09 · 161 阅读 · 0 评论 -
JVM基础(八一):Java类加载时机和加载过程
https://blog.csdn.net/justloveyou_/article/details/72466416?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogComme转载 2021-08-03 15:33:30 · 678 阅读 · 0 评论 -
JVM基础(七):Java类型信息(Class对象)与反射机制
深入理解Class对象1、RRTI的概念以及Class对象作用认识Class对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RRTI的说法则是源于《Thinking in Java》一书,其作用是在运行时识别一个对象的类型和类的信息,这里分两种:传统的”RRTI”,它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类型,如new对象时该类必须转载 2021-05-09 20:49:38 · 544 阅读 · 0 评论 -
JVM基础(六):成员变量和静态变量/静态初始化和非静态初始化
3、内存分配实例public class JVMCase { // 常量 public final static String MAN_SEX_TYPE = "man"; // 静态变量 public static String WOMAN_SEX_TYPE = "woman"; public static void main(String[] args) { Student stu = new Student(); stu.setName("nick");...原创 2021-07-17 20:21:43 · 743 阅读 · 0 评论 -
JVM实战(二一): -Xss -Xms -Xmx -Xmn 参数设置
XmnXmsXmxXss有什么区别Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。-Xms 堆内存的初始大小,默认为物理内存的1/64 -Xmx 堆内存的最大大小,默认为物理内存的1/4 -Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn -Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生原创 2021-07-03 20:17:08 · 9578 阅读 · 0 评论 -
JVM基础(四):Java类加载机制
1、前言我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用。而虚拟机如何加载这些.class文件?.class文件的信息进入到虚拟机后会发生什么变化?这些都是本文要讲的内容,文章将会讲解加载类加载的每个阶段Java虚拟机需要做什么事(加粗标红)。2、类使用的7个阶段类从被加载到虚拟机内存中开始,到卸载出内存,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation转载 2021-02-07 23:49:57 · 652 阅读 · 3 评论 -
JVM基础(十一):Java 设置系统参数和运行参数
1、系统参数系统级全局变量,该参数在程序中任何位置都可以访问到。优先级最高,覆盖程序中同名配置。系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。虚拟机系统参数中设置的参数键值对,在程序.原创 2021-02-07 23:05:46 · 1003 阅读 · 2 评论 -
JVM基础(二):JVM在什么时候启动的
1、下图展示了JVM的主要结构:可以看出,JVM主要包括四个部分:第一部分:类加载器(Class Loader)第二部分:执行引擎(Execution Engine)第三部分:运行时数据区(Runtime Data Area,也称内存区),内存区又包含:(1)方法区(Method Area)(2)堆(HEAP)(3)Java虚拟机栈(Java VM Stack)(4)程序计数器(Program Counter Register,亦简称PC Register)(.转载 2021-02-07 20:08:24 · 1290 阅读 · 1 评论 -
JVM基础(九):Java内存泄露与内存溢出
Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽);而Java内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。Java内存泄露与溢出的区别Java内存溢出就是要求分配的内存超出了系统能给的,系统不能满足需求,于是产生溢出。Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽)。1.Java内存泄露是说程序逻辑问题,造成申请的内存无法释放.这样的话无论多少内存,早晚都会被占用光的.最.原创 2020-11-28 19:18:12 · 207 阅读 · 0 评论 -
JVM性能调优(99):GC优化好文章-待看
优化:http://blog.itpub.net/31562044/viewspace-2285474/从实际调优经验谈GC优化:https://mp.weixin.qq.com/s?src=11×tamp=1606556833&ver=2734&signature=xNp5P26*cZZs2QU0Y7pxjm81QrK8U-Ox*1rIPa01ClWV86fCLJlqXt9--EFfjPP2LAStwJuw7b9Q9A61pABuMVtfFG2XqEZeSCrtpk5原创 2020-11-28 19:15:45 · 159 阅读 · 0 评论 -
JVM基础(十):吞吐量和延迟
Latency,中文译作延迟。Throughput,中文译作吞吐量。它们是衡量软件系统的最常见的两个指标。 延迟一般包括单向延迟(One-way Latency)和往返延迟(Round Trip Latency),实际测量时一般取往返延迟。它的单位一般是ms、s、min、h等。 而吞吐量一般指相当一段时间内测量出来的系统单位时间处理的任务数或事务数(TPS)。注意“相当一段时间”,不是几秒,而可能是十几分钟、半个小时、一天、几周甚至几月。它的单位一般是TPS、每单位时间写入磁盘的字节数等...转载 2020-11-28 19:09:52 · 1722 阅读 · 0 评论 -
JVM基础(一): 内存详解
Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚拟机栈 2.3 本地方法栈 2.4 堆 2.5 方法区 2.5.1 方法区和永久代的关系 2.5.2 常用参数 2.5.3 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 2.6 运行时常量池 2.7 直接内存 三 HotSpot转载 2020-11-28 19:04:36 · 1684 阅读 · 0 评论