
JVM
JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统的深入讲解JVM相关知识。包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等。
mocas_wang
摸鱼专家
展开
-
Java内存模型(JMM)
目录1 简述2 硬件的效率与一致性3.Java内存模型3.1 主内存与工作内存3.2 内存间交互操作3.4 volatile型变量的特殊规则3.5 原子性、可见性与有序性3.6 重排序3.7 happens-before4 JAVA 内存模型的抽象4.1 重排序4.2 VOLATILE 特性4.3 锁1 简述Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实.原创 2020-12-16 21:07:58 · 189 阅读 · 0 评论 -
JVM性能分析与调优总结
目录1 JVM调优知识背景简介1.1 数据类型堆与栈的概念Java对象的大小1.2 堆内存分配与垃圾回收引用类型垃圾回收堆内存分配策略JVM GC组合方式2 JVM调优参数简介2.1 JVM参数简介2.2 JVM参数示例2.3 堆大小设置2.4 回收器选择2.5 常见配置汇总3 JVM调优3.1 JVM调优目标1. 何时需要做jvm调优?2. JVM调优原则3. JVM调优目标3.2 调优经验总结1. JVM调优步...原创 2020-11-10 19:31:16 · 1105 阅读 · 0 评论 -
Java深入理解深拷贝和浅拷贝区别
目录1 什么是深拷贝和浅拷贝2 拷贝的内存变化2.1 基本类型和引用类型在赋值时内存的变化2.2 基本类型和引用类型作为函数参数的区别2.3 深拷贝和浅拷贝3 深浅拷贝实例3.1 浅拷贝3.2 深拷贝:3.3 Arrays.copyOf()1 什么是深拷贝和浅拷贝浅拷贝和深拷贝都是对一个已有对象的操作,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函。在java中,一般使用=好做赋值操作的时候,对于基本数据类型原创 2020-11-08 10:22:42 · 4581 阅读 · 0 评论 -
JVM--方法区、永久代、元空间、字符串常量池
目录1 JVM内存模型简介2 永久代和方法区的关系3 元空间4 Class文件常量池5 运行时常量池6 字符串常量池7 常量池应用总结8 内存空间的使用常见问题9 实例分析1 JVM内存模型简介要说Java中的栈,堆,方法区和常量池就要提到HotSpot,HotSpot是Sun JDK 和 Open JDK中所带的虚拟机。 (Sun JDK 和 Open JDK除了注释不同,代码实现基本上是一样的)以下说的内容都是围绕HotSpot。堆——堆是所有线程..原创 2020-10-26 16:30:39 · 1820 阅读 · 2 评论 -
JVM监控及故障处理工具
目录1 JVM参数2 SunJDK监控和故障处理工具jps: 虚拟机进程状况工具jstat: 虚拟机统计信息监视工具jmap: java 内存映射工具jhat:jvm堆快照分析工具jstack:java堆栈跟踪工具jinfo:java配置信息3 JDK的可视化工具4 应用1、cpu飙升2、线程死锁3、OOM内存泄露1 JVM参数参数分类1.标准参数 功能和输出的参数都是很稳定的 在未来的JVM版本中不会改变 可以使用java -he...原创 2020-10-25 20:34:23 · 839 阅读 · 0 评论 -
底层对string,stringbuffer和stringbuilder的理解
目录1 简单介绍2 底层原理2.1 String原理2.2 字符串相加3 对比总结1 简单介绍java中用于处理字符串常用的有三个类:1、java.lang.String2、java.lang.StringBuffer3、java.lang.StrungBuilder三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。StringBuffer是线程安全,可以原创 2020-10-21 20:34:00 · 620 阅读 · 0 评论 -
图解JVM垃圾回收机制
目录1 概述1.1 什么是垃圾?1.2哪些“垃圾”需要回收?1.3 基本概念2 垃圾判断算法2.1 引用计数法2.2 可达性分析算法3.垃圾回收算法3.1 标记-清除算法3.2 复制算法3.3 标记-整理算法3.4 分代收集算法4 内存区域与回收策略4.1 对象优先在Eden分配4.2 Survivor区4.3 大对象直接进入老年代4.4 长期存活的对象将进入老年代4.5 动态对象年龄判定5 垃圾回收器查看 JVM 使用的默..原创 2020-10-17 10:24:50 · 1101 阅读 · 0 评论 -
jvm字节码执行引擎
目录1 概述2 运行时栈帧2.1 局部变量表2.2 操作数栈2.3 动态连接2.4 方法返回地址3 方法调用3.1 解析3.2 分派3.2.1 静态分派3.2.2 动态分派3.2.3 单分派和多分派3.2.4 虚拟机动态分派的实现4 基于栈的字节码解释执行引擎4.1 解释执行 & 编译执行 & 编译器4.2 基于栈的指令集和基于寄存器的指令集4.3 基于栈的解释器执行过程1 概述我们都知道,在当前的Java中(1.0转载 2020-10-13 20:05:45 · 481 阅读 · 0 评论 -
Java内存分配(多实例演示)
目录1 概述2 内存区域分配1、Java内存区域2、内存分配3、方法区中的常量池3 内存分配机制4 内存调用示意图5 运行实例实例1实例2实例 3实例 41 概述Java 程序运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。一、栈:储存局部变量局部变量:在方法的定义中或者在方法声明上的变量称为局部变量。 特点:栈内存的数据用完就释放。二、堆:储存 new...原创 2020-09-07 20:51:52 · 3209 阅读 · 1 评论 -
JVM堆栈内存分析
1 基本概念程序中所有的方法、变量、常量、实例、静态存储都是由JVM在内存中进行分配的。1.寄存器:JVM中运行最快的,JVM内部的虚拟的存储器和CPU有关,我们无法控制。2.堆栈(也就是平时所说的栈stack):用来存放基本数据类型和引用数据类型的实例的(也就是实例对象的在堆中的首地址,Person p = new Person; p存贮在堆栈中,值为@23651dff。还有就是堆栈是线程独享的。每一个线程都有自己的线程栈。3.堆(也叫做对内存或者对空间deap):...原创 2020-09-07 19:16:25 · 1697 阅读 · 0 评论 -
深入了解JVM内存模型
1 概述1.1 CPU和内存的交互在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存,用于缓解这种情况。现在cpu和内存的交互大致如下。cpu上加入了高速缓存这样做解决了处理器和内存的矛盾(一快一慢),但是引来的新的问题 -缓存一致性CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找,.原创 2020-08-12 15:42:39 · 278 阅读 · 0 评论 -
Class.forName()用法详解
目录1.什么是class对象2.获得class对象的三种方法3.class的作用和方法4 Class.forName()用法4.1 什么时候用Class.forName()?4.2 newInstance和new关键字的区别5 应用问题解析情景一:载入数据库驱动的时候情景二:使用AIDL与电话管理Servic进行通信1.什么是class对象 类是程序的一部分,每个类都有一个class对象。换言之,每当编写并且编译了一个新类,就会产生一个class对象(更...原创 2020-07-18 15:12:39 · 66070 阅读 · 12 评论 -
深入理解JVM中类加载、类加载器
目录1 概述1.1 什么是类的加载1.2 在什么时候才会启动类加载器?1.3 从哪个地方去加载.class文件2 加载过程1、加载2、验证3、准备4、解析5、初始化3 类加载器3.1 类加载器3.2 类加载的三种方式3.3 双亲委派原则双亲委派模式优势类加载器间的关系3.4自定义类加载器1 概述类的加载过程是指类加载器尝试加载class二进制文件,并在JVM中生成对应的数据结构,然后使其分布在JVM对应的内存区域。1.1 什么.原创 2020-08-11 10:55:07 · 1566 阅读 · 0 评论 -
JVM之.class文件解析
目录1 概述2 文件结构3 示例分析1 概述Java字节码类文件(.class)是Java编译器编译Java源文件(.java)产生的“目标文件”。它是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间(方便于网络的传输)。Java源文件在被Java编译器编译之后, 每个类(或者接口)都单独占据一个class文件, 并且类中的所有信息都会在原创 2020-08-10 14:43:32 · 620 阅读 · 0 评论 -
jvm入门,什么是JVM?多图详解
目录1 Java虚拟机定义与原理1.1 定义1.2 原理2 JRE/JDK/JVM是什么关系?3 JVM内存区域3.1 区域划分3.2 JVM运行时数据区4JVM执行程序的过程4.1 Java文件是如何被运行的4.2 简单的代码例子5 重点过程解析5.1 类加载器的介绍类加载器的流程类加载器的加载顺序双亲委派机制5.2 JVM的对象分配规则5.3 JVM的生命周期5.4 JVM垃圾回收1 Java虚拟机定义与原理1.1 ...原创 2020-08-08 13:47:59 · 885 阅读 · 0 评论