-
JVM教程
2019-11-26 19:22:06走进JVM概论1. 字节码1.1 字节码指令1.2 源码转化成字节码过程1.3 内存布局2. 类加载过程 概论 BEA公司 java中间件软件公司, 已被Oracle收购 OpenJDK项目 GPL协议 编译执行和解释执行 java是静态语言, ...走进JVM
概论
java中间件软件公司, 已被Oracle收购
GPL协议
java是静态语言, 但是用hotSpot的话是解释与编译混合执行的模式; python是脚本语言
及时编译器(Just-In-Time)
不是很明白, 为什么使用分层编译之后就削峰了, jit在运行到一定频率执行也是削峰啊
- jvm的技术难点举例
- 多租户JVM
- Wisp协程技术
- 大数据场景的ZenGC
1. 字节码
1.1 字节码指令
栈帧是一个内存区块
- 虚拟机栈-栈帧
1.1 局部变量表
1.2 操作数栈
1.3 动态链接
1.4 方法出口 - StackOverFlowError
- OutOfMemoryError
基于栈的设计模式, 用了栈还是得走一遍寄存器啊
1.2 源码转化成字节码过程
这篇文章还是没啥用
1.3 即时编译流程
2. 类加载过程
2.1 类加载过程
类加载是一个将.class字节码文件实例化成Class对象并进行相关初始化的过程2.2 双亲委派模型
这里只能用什么配什么, 看不到原配置
有用
- -XX:+TraceClassLoading
在启动项目时可以显示类加载顺序, 比较实用
- 需要自定义类加载器的情况
- 隔离加载类
- 修改类的加载方式
- 扩展加载源
- 防止源码泄漏
3 内存布局
3.1 经典的jvm内存布局
3.1.1 堆区
3.1.2 元空间
3.1.3 虚拟机栈
- 栈
先进后出的数据结构
- JVM运行环境
基于栈结构的运行环境
CPU的组成部分
用来暂存指令和数据还有地址- 虚拟机栈
描述Java方法执行限额内存区域
线程私有1. 局部变量表
2. 操作栈
- 操作栈
初始状态为空的桶式结构栈
- 桶式结构
后进先出
- 操作栈总结
操作栈在虚拟机栈中, 那就是栈中栈咯
3. 动态链接
4. 方法返回地址
3.1.4 本地方法栈
3.1.5 程序计数寄存器
4 面试
-
JAVA JVM教程
2019-01-28 16:16:54JVM教程公众号内回复:JVM即可获取下载链接 下载资源啦 “不要拿小人的错误来惩罚自己,不要在这些微不足道的事情上折磨浪费自己的宝贵时间。行走在岁月的小巷,听风...
JVM教程公众号内回复:JVM
即可获取下载链接 下载资源啦
“不要拿小人的错误来惩罚自己,不要在这些微不足道的事情上折磨浪费自己的宝贵时间。
行走在岁月的小巷,听风,读雨,夜色空寂,一切烟云,皆会慢慢散去,光阴眷顾,你我默默相依,慢慢老去,红尘若可安好,便可不悲不喜,不离不弃,情真意切,绵绵无期。
我小时候那会,山村没有电,天一黑,就上床睡觉,极度沉闷,黑漆漆的夜晚,除了狗叫和呼呼风声,什么都没有。要是县里来放电影,那就热闹喽。十里八村的,亲戚朋友,全都涌来,从白天就开始热闹.
学会宽恕别人,就是学会善待自己。仇恨只能永远让我们的心灵生活在黑暗之中;而宽恕,却能让我们的心灵获得自由,获得解放。宽恕别人,可以让生活更轻松愉快。宽恕别人,可以让我们有更多的朋友。宽恕别人,就是解放自己,还心灵一份纯静。
扫码关注,2019”猪”事顺利
如果对你有帮助,那就点个赞啦
-
尚硅谷2020最新版宋红康JVM教程-目录
2020-10-18 16:25:57尚硅谷2020最新版宋红康JVM教程-1-JVM简介 尚硅谷2020最新版宋红康JVM教程-2-类加载子系统 尚硅谷2020最新版宋红康JVM教程-3-运行时数据区概述及线程 尚硅谷2020最新版宋红康JVM教程-4-程序计数器 尚硅谷...第一篇:内存与垃圾回收篇
第二篇:字节码与类的加载篇
第1章Class文件结构
第2章Class文件结构
第3章类的加载过程(类的生命周期)
尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-2-过程一:Loading(加载)阶段
尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-3-过程二:Linking(链接)阶段
尚硅谷2020最新版宋红康JVM教程-中篇-第3章类的加载过程(类的生命周期)详解-4-过程三:Initialization(初始化)阶段
第4章:再谈类的加载器
-
[JVM教程与调优] 什么是JVM运行时参数?
2020-03-26 08:00:00点击上方“Coder编程”,选择“置顶公众号”技术文章第一时间送达!什么是JVM运行时参数?我们接着上一章节[JVM教程与调优] JVM都有哪些参数类型...点击上方“Coder编程”,选择“置顶公众号”
技术文章第一时间送达!
什么是JVM运行时参数? 我们接着上一章节[JVM教程与调优] JVM都有哪些参数类型?的内容继续讲解,这章我们来介绍一下:如何查看JVM运行时参数。这一点十分重要,因为我们在进行JVM参数调优的时候,我们首先得知道目前系统运行的值是什么,然后相应的根据相关参数进行调优。
1.-XX:+PrintFlagsInitial(查看初始值)
2.-XX:+PrinFlagsFinal(查看最终值)
3.-XX:+UnlockExperimentalVMOptions(解锁实验参数)
4.-XX:+UnlockDiagnosticVMOptions(解锁诊断参数)
5.-XX:+PrintCommandLineFlags(打印命令行参数)PrinFlagsFinal
示例一 bool类型 属性名:UseG1GC 值:false
因此可以看出,并没有使用G1GC。示例二 InitialHeapSize := 130023424
表示初始堆的值大小。注意:
=表示默认值
:=被用户或者JVM修改后的值演示一下
演示 可以看到有非常多的参数。有兴趣的小伙伴可以自己试试。
那么刚才我们看到的参数是哪个进程的呢?
答案是:通过执行java -XX:+PrinFlagsFinal -version
这个命令时的进程参数值。如果我们要查看一个在运行时的JVM参数值,那么如何查看呢?这就是我们后面讲到的jinfo,在此之前,我们先来看一下·jps·。
jps
jps
它就类似于Linux系统中的ps
,也是用来查看系统进程的。不过它是专门用来查看java的进程。接下来我们来简单演示一下jps
的使用如何使用?
jps使用 更多
jps
的适用参数命令,可以去这里查看jps的命令使用地址 jinfo
那么我们如何去查看一个正在运行的JVM的参数值呢?
那么用jinfo
就可以了。jinfo使用 再例如,我们如何查看tomcat的最大内存值是多少?那么我们首先得知道命令,然后找到对应的pid。
jinfo使用举例 如图,其中23789就是
tomcat
的进程pid
,查看对内存大小命令:MaxHeapSize
。
可以看到最大堆内存大小为268435456jinfo使用举例2 可以看到我们手动赋值的参数,也可以看到默认有的参数值。
查看最大内存
查看最大内存 查看垃圾回收器
查看垃圾回收器 jstat查看JVM统计信息
类装载
垃圾收集
JIT编译
垃圾回收这块非常有用,因为我们能够非常清楚的看到内存结构里面每一块的大小是如何进行变化的。
命令格式
命令格式 options:-class,-compiler,-gc,-printcompilation
我们来查看一下jstat文档。
jstat文档 我们来介绍一下几个命令。
类装载
类装载命令演示 jstat -class 3176 1000 10
后面的1000表示每隔1000ms,10表示一共输出10次
我们来看一下文档中是如何介绍-class命令。
-class命令 分别表示什么含义呢?
Loaded:类装载的个数
Bytes:装载的kBs数
Unloaded:卸载的个数
Bytes:卸载的kBs数
Time:所花费的装载和卸载的时间
垃圾收集
命令:-gc、-gcutil、-gccause、-gcnew、-gcold
垃圾收集 输入:jstat -gc 3176 1000 3
同样,后面表示每隔1000ms,一共打印输出3次
我们同样来看一下文档中的-gc的命令
-gc命令 我们来总结一下-gc输出结果。
S0C、S1C、S0U、S1U:S0和S1的总量与使用量
EC、EU:Eden区总量与使用量
OC、OU:Old区总量与使用量
MC、MU:Metaspace区总量与使用量
CCSC、CCSU:压缩类空间总量与使用量
YGC、YGCT:YoungGC的次数与时间
FGC、FGCT:FullGC的次数与时间
GCT:总的GC时间
JIT编译
命令:-compiler、-printcompilation
我们来演示一下JIT编译。
JIT编译演示 这些都表示什么含义呢?我们来看一下我们的文档。
JIT命令文档 Compiled:表示完成了多少个编译任务
Failed:表示失败的编译任务个数
Invalid:表示无效的编译任务
Time:执行编译任务所花的时间。
FailedType:上次失败编译的编译类型。
FailedMethod:上次编译失败的类名和方法。
小伙伴可以结合一下上方的演示图案,来理解一下是什么含义。
大家了解一下就可以,实际工作中作用并不是很大。
以上都是以JDK1.8进行介绍。这里小伙伴们先简单了解一下这一块,后续再详细介绍。小伙伴们可以自己在电脑上尝试一下使用命令,观察一下打印结果。
关于JVM参数的命令,在文档中还有更多的详细介绍。感兴趣的小伙伴,可以自行去查看。
传送门:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE下一章,我们将来学习一下JVM的内存结构以及内存溢出。感兴趣的小伙伴,可以关注一下~
推荐
文末
文章收录至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
欢迎关注并star~微信公众号 我知道你 “在看”
-
[JVM教程与调优] 了解JVM 堆内存溢出以及非堆内存溢出
2020-03-30 08:00:00点击上方“Coder编程”,选择“置顶公众号”技术文章第一时间送达!JVM教程与调优 了解JVM 堆内存溢出以及非堆内存溢出.png在上一章中我们介绍了... -
尚硅谷2020最新版宋红康JVM教程持续更新中(java虚拟机详解,jvm从入门到精通) - ppt课件
2020-05-22 13:47:26尚硅谷宋红康JVM教程(java虚拟机详解,jvm从入门到精通)_哔哩哔哩 -bilibilihttps://www.bilibili.com/video/av83622425 文章中来源于Spirit_wolf老师一边看视频一边截图PPT的整理:... -
尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇——01
2021-01-03 07:41:52尚硅谷 宋红康 JVM教程 学习笔记 https://www.bilibili.com/video/BV1PJ411n7xZ P01-JVM内存与垃圾回收篇概述 09:34 P02-如何看待Java上层技术与JVM 20:17 P03-为什么要学习JVM 05:14 P04-面向人群和课程特点 10:15 ... -
尚硅谷 宋红康 JVM教程_02_字节码与类的加载篇
2021-01-18 00:08:05目录 尚硅谷 宋红康 JVM教程 学习笔记 https://www.bilibili.com/video/BV1PJ411n7xZ ppt地址: https://download.csdn.net/download/wei198621/14040543 JVM参数列表: ...P204-JVM中篇内容概述 11:51 ... -
尚硅谷2020最新版宋红康JVM教程-1-JVM简介
2020-08-11 20:20:03跨语言的JVM(虚拟机只关心字节码文件) JVM的作用 JVM的位置 JVM的整体结构 方法区和堆区是所有线程共享的内存区域;而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。 Java栈又叫做jvm... -
JVM教程之内存管理和垃圾回收(三)
2020-08-30 23:40:13主要介绍了JVM学习笔记的第三篇内存管理和垃圾回收,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
史上最实用的 JVM 教程 - 01 - JVM 学习路线
2018-09-05 11:15:04JVM 学习路线 -
[JVM教程与调优] 为什么要学习JVM虚拟机?
2020-03-24 08:00:00点击上方“Coder编程”,选择“置顶公众号”技术文章第一时间送达!为什么要学习JVM虚拟机JVM在我们开发阶段不会用到,但是到了生产环境中,那么就会变... -
jvm-003(张龙老师jvm教程) 大纲分析与工具使用
2020-06-26 18:18:18jvm-003 1、jvm的学习方向 2、jConsole对虚拟机的监测情况 3、jvisualvm对你虚拟的监测情况 -
[JVM教程与调优] JVM都有哪些参数类型?
2020-03-24 08:00:00点击上方“Coder编程”,选择“置顶公众号”技术文章第一时间送达!JVM都有哪些参数类型?JDK本身是提供了一些监控工具,有一些是命令行,也有图形界面... -
jvm-010(张龙老师jvm教程) 接口的初始化
2020-07-03 13:35:01jvm-010 接口的初始化 1、调用接口的常量:编译器即可确定的常量,不会引发接口的初始化。 public class TestCode05 { public static void main(String[] args) { System.out.println(ParentInterface.a); } }... -
史上最实用的 JVM 教程 - 02 - Jvm 内存区域
2018-09-05 11:23:34Java 中内存的管理是通过 JVM 来自动管理的. 了解 JVM 有利于进一步理解 Java. JVM 内存结构如下图所示: 在 Java 虚拟机规范里,JVM 被分为 7 个内存区域。 虚拟机规范中的 7 个内存区域分别是三个线程私有的和... -
记一个JVM教程地址
2020-12-07 17:44:52http://www.mstacks.com/131/index.html -
JVM教程之Java代码编译和执行的整个过程(二)
2020-08-30 23:42:48主要介绍了JVM学习笔记第二篇,关于Java代码编译和执行的整个过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
jvm-002(张龙老师jvm教程) 学习方法002
2020-06-26 18:16:28学习方法002 -
jvm-001(张龙老师jvm教程) 学习方法001
2020-06-26 18:15:08学习方法001 -
JVM教程之一【基础篇】
2019-12-28 17:49:25JVM关系 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。 Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含... -
jvm-004(张龙老师jvm教程) 深入解析与阶段分解
2020-06-26 18:22:01jvm-004 1、在java代码中,类型的加载、连接、初始化都是在程序运行期间完成的。 2、优点:java是一门静态语言,在程序运行期间进行类的加载、连接和初始化可以为java语言提供更大的灵活性(如动态代理),增加了... -
jvm-015(张龙老师jvm教程) 自定义类加载器
2020-07-18 22:56:35String target = "D:/develop/CCXI/jvm-project/bin/cn/com/ccxi/jvm/test/TestCode15.class"; String className = "cn.com.ccxi.jvm.test.TestCode15"; Class clazz = loader1.findClass(target, className); ... -
jvm-005(张龙老师jvm教程) 加载连接初始化过程详解
2020-06-26 18:28:57jvm-005一、java程序对类的使用方式 1:主动使用 2:被动使用二、初始化 所有的java虚拟机的实现,都是在类或接口的首次主动使用时才初始化他们。三、主动使用的7中情况: 1:创建类的实例,new关键词; 2:... -
jvm-008(张龙老师jvm教程) 初始化加载顺序代码示例分析
2020-06-30 20:19:00jvm-008 一、初始化的执行顺序:类的初始化顺序是按照代码逻辑自上而下依次执行的。 代码1: public class TestCode06 { public static void main(String[] args) { MyParent06 instance = MyParent06.... -
jvm-006(张龙老师jvm教程) 常量传播优化和字节码指令入门
2020-06-27 22:02:55jvm-006 一、常量传播优化: 常量在编译阶段,如果能确定其数值,会存入到调用类的常量池中。在运行阶段,调用类和常量定义的类就没有任何关系了(可以将定义类的.class文件删除尝试,也不会报错)。因此,常量的... -
jvm-009(张龙老师jvm教程) 类加载的深入解析与重要特性
2020-07-02 18:33:52jvm-009 一、类的加载 类加载的最终产品是位于内存中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序提供了访问方法区内该类的数据结构的接口。 类加载器并不需要等到某个类被首次主动... -
jvm-016(张龙老师jvm教程) ClassLoader的几个重要方法
2020-07-23 14:10:032、参数 String s:结果类的二进制类名 byte[] abyte0:类的二进制字节数组 int i:开始字节下标 int j:结束字节下标 四、方法4: byte[] cn.com.ccxi.test.jvm.TestCode16_Revise.loadClassData(String className... -
jvm-012(张龙老师jvm教程) 类初始化的深度解析
2020-07-16 17:39:34代码一: 类只会被初始化一次。 public class TestCode10 { static { System.out.println("TestCode10 init .");... } } 执行结果: class cn.com.ccxi.jvm.test.CL ------ CL init. class cn.com.ccxi.jvm.test.CL
-
异常色散光纤激光器中的线性耗散孤子
-
两种新的具有最优修复的2位奇偶校验MDS阵列代码
-
PPT大神之路高清教程
-
龙芯实训平台应用实战(希云)
-
洛谷P1420 最长连号经典解法
-
Docker从入门到精通
-
python数据分析之Pandas数据结构和操作
-
2013年下半年 嵌入式系统设计师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
洛谷P5725 【深基4.习8】求三角形经典解法
-
2012年下半年 嵌入式系统设计师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
元素周期表-three.js实战详解
-
白话:java从入门到实战
-
C++学习(二一七)有关Nsight Tegra
-
深究字符编码的奥秘,与乱码说再见
-
搭建docker私有库的具体方法
-
springcloud-gateway源码-(六)全流程处理导图
-
使用 Linux 平台充当 Router 路由器
-
GO语言 实现端口扫描
-
spark大数据分析与实战
-
项目经理成长之路