JVM
文章平均质量分 72
cpuCode
站在巨人的肩上行走 https://github.com/CPU-Code
展开
-
JVM 导航
执行引擎 类加载 内存区 对象生命周期 GC 运维 实践原创 2023-06-27 22:34:21 · 668 阅读 · 0 评论 -
JVM GC 区别
并行收集器 [吞吐量优先] : Parallel Scanvenge、Parallel Old。串行收集器 : Serial , Serial Old。并发收集器 [停顿时间优先] : CMS、G1。原创 2023-06-29 20:29:02 · 652 阅读 · 0 评论 -
JVM G1
G1 划分 : 将 Java 堆分为多个大小相等的独立区域 (Region)G1 (Garbage-First) : 面向服务器的垃圾收集器。GCViewer 分析吞吐量和响应时间。原创 2023-06-29 20:26:13 · 1436 阅读 · 0 评论 -
JVM GC器
CMS (Concurrent Mark Sweep) 收集器 : 获取最短回收停顿时间为目标的收集器。Parallel Scavenge 收集器 : 关注点吞吐量(高效率的利用 CPU)ParNew 收集器 : Serial 收集器的多线程。Serial (串行) 收集器 : 单线程收集器。Serial 的老年代 : 单线程收集器。JDK11 引入 ZGC。原创 2023-06-29 20:25:39 · 1257 阅读 · 0 评论 -
JVM GC 算法
标记-复制算法 (Mark-Copying) : 将内存分为大小相同的两块,每次使用其中一块。垃圾回收器都用分代收集算法 : 根据对象存活周期的不同 , 将内存分为几块。原创 2023-06-29 20:25:13 · 769 阅读 · 0 评论 -
JVM 判断删除对象
JDK1.2 后,对引用分 (引用强度 : 逐渐减弱) :强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference)该算法的思想 : 通过 GC Roots 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链。问题 : 当对象之间互相引用 ,就会产生依赖关系,就会导致无法释放,出现内存泄漏。软引用 : 当内存足够,不会回收,只有当内存不足时,就会回收这些对象的内存。原创 2023-06-29 20:22:24 · 1346 阅读 · 0 评论 -
JVM 回收原则
对象优先在新生代 Eden 区分配。大对象直接进入老年代。原创 2023-06-29 20:21:16 · 574 阅读 · 0 评论 -
JVM 对象创建
直接访问 : reference 直接指向 heap 中的对象实例,但类型数据访问地址要在实例中存储。引用定位对象的方式 : 句柄池访问 , 直接访问。对齐填充的作用 : 提高 CPU 访问数据的效率。原创 2023-06-29 20:22:50 · 1314 阅读 · 0 评论 -
JVM 生命周期
对象的生命周期阶段:不重载 原因 :原创 2023-06-29 20:19:53 · 943 阅读 · 0 评论 -
JVM 方法区
方法区 (非堆) : 存放 Class 文件信息。如 : 类信息、字段信息、方法信息、常量、静态变量、代码缓存。方法区的运行时常量池 : 存放类加载后的常量池表 (Constant Pool Table)刚启动时 , 就 Full GC , 但老年代充足 , 检查 Metaspace 区大小。JDK 1.7 后,将字符串常量池放在堆中。字符串常量池 : 避免字符串的重复创建。原创 2023-06-29 20:15:41 · 466 阅读 · 0 评论 -
JVM 虚拟机栈
虚拟机栈 : 保存每个 Java 方法调用状态。原创 2023-06-29 20:16:47 · 1220 阅读 · 0 评论 -
JVM 堆
TLAB (Thread Local Allocation Buffer) 作用 : 加速对象的分配。原创 2023-06-27 23:02:02 · 618 阅读 · 1 评论 -
JVM 内存区域
运行数据区 :Java 8 后 :细节图 :JDK1.4 引入 NIO (Non-Blocking I/O,New I/O) : 基于通道 (Channel) 与缓存区 (Buffer) 的 I/O 方式直接内存 :程序计数器作用 :注意点 :本地方法栈 : 用到 Native 方法服务原创 2023-06-27 23:00:10 · 685 阅读 · 1 评论 -
JVM 双亲委派机制
双亲委派机制 : 先找父亲加载,不行, 再给儿子加载bootstrap。原创 2023-06-27 22:54:51 · 724 阅读 · 1 评论 -
JVM 类加载器
类加载器 (ClassLoader) 的作用 :类加载器 :分层好处 :类运行加载过程, 会创建 JVM 启动器实例原创 2023-06-27 22:52:34 · 608 阅读 · 1 评论 -
JVM 类加载
验证 : 确保 Class 文件符合当前虚拟机的要求,避免虚拟机崩溃。解析阶段 : 将常量池内的符号引用 换为 直接引用。静态变量 : 分配内存且设置该类变量的默认初始值。类初始化被触发点 : 主动引用 , 被动引用。初始化阶段 : 执行类构造器 () 方法。属性,准备阶段会初始化为。当类字段属性表中存在。原创 2023-06-27 22:49:54 · 697 阅读 · 1 评论 -
JVM 执行引擎
javac 编译器将 Java 代码编译成 class 文件 (前期编译),再给 JVM 根据不同平台 , 通过执行引擎转为机器码。原创 2023-06-27 22:42:44 · 740 阅读 · 1 评论 -
JVM指令手册
JVM指令手册一、栈和局部变量操作将常量压入栈的指令从栈中的局部变量中装载值的指令将栈中的值存入局部变量的指令通用(无类型)栈操作二、类型转换三、整数运算四、逻辑运算移位操作按位布尔运算浮点运算五、对象和数组对象操作指令数组操作指令六、控制流条件分支指令比较指令无条件转移指令表跳转指令异常七、方法调用与返回方法调用指令方法返回指令线程同步八、JVM指令助记符一、栈和局部变量操作将常量压入栈的指令//将null对象引用压入栈aconst_null //将int类型常量-1压入栈iconst_m1原创 2021-02-14 17:20:11 · 215 阅读 · 0 评论 -
MAT 启动错误解决方案 Java was started but returned exit code=13
MAT 启动错误解决方案 Java was started but returned exit code=13错误信息 :Java was started but returned exit code=13C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe-Xmx1024m-jar D:\ProgramFiles\mat\plugins/org.eclipse.equinox.launcher_1.5.700.v原创 2021-02-10 11:33:38 · 2633 阅读 · 2 评论 -
JVM运行时参数
JVM运行时参数1. JVM参数选项类型类型一:标准参数选项特点各种选项类型二:-X参数选项特点各种选项JVM的JIT编译模式相关的选项特别地类型三:-XX参数选项2. 添加JVM参数选项EclipseIDEA运行jar包通过Tomcat运行war包程序运行过程中3. 常用的JVM参数选项打印设置的XX选项及值堆、栈、方法区等内存大小设置栈堆内存方法区直接内存OutofMemory相关的选项垃圾收集器相关选项GC日志相关选项常用参数其他参数其他参数4. 通过Java代码获取/VM参数1. JVM参数选项类原创 2021-02-05 17:39:08 · 766 阅读 · 0 评论 -
分析GC日志
分析GC日志1. GC日志参数-verbose:gc-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintGCDateStamps-XX:+PrintHeapAtGC-Xloggc:2. GC日志格式复习:GC分类GC日志分类GC日志结构剖析Minor GC 日志解析2020-11-20T17:19:43.265-08000.822:[GC(Allocation Failure)[PSYoungGen:76800K->8433K(原创 2021-02-05 17:16:13 · 456 阅读 · 0 评论 -
JVM监控及诊断工具-命令行篇
JVM监控及诊断工具-命令行篇01-概述简单命令行工具02-jps:查看正在运行的Java进程基本情况测试基本语法options参数hostid参数03-jstat:查看JVM统计信息基本情况基本语法option参数 -gc-21-t参数 可以在输出信息前加上一个Timestamp列,显示程序的运行时间-h参数 可以在周期性数据输出时,输出多少行数据后输出一个表头信息interval参数 用于指定输出统计数据的周期,单位为毫秒。即:查询间隔count参数 用于指定原创 2021-02-05 16:48:12 · 772 阅读 · 1 评论 -
JVM监控及诊断工具-GUI篇
JVM监控及诊断工具-GUI篇1. 工具概述2. jConsole基本概述启动三种连接方式LocalRemoteAdvanced主要作用3. Visual VM基本概述插件的安装连接方式本地连接远程连接主要功能4. eclipse MAT基本概述获取堆dump文件分析堆dump文件histogramthread overview获得对象相互引用的关系浅堆与深堆支配树案例:Tomcat堆溢出分析说明分析过程补充1. 再谈内存泄漏内存泄漏的理解与分类Java中内存泄漏的8种情况1-静态集合类2-单例模式3-内部原创 2021-02-05 16:47:29 · 1327 阅读 · 0 评论 -
JVM调优概述
JVM调优概述1. 大厂面试题如何进行JVM调优?有哪些方法?如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决?字节跳动:三面:JVM如何调优、参数怎么调?拼多多:从SQL、JVM、架构、数据库四个方面讲讲优化思路京东:JVM诊断调优工具用过哪些?每秒几十万并发的秒杀系统为什么会频繁发生GC?日均百万级交易系统如何优化JVM?线上生产系统OOM如何监控及定位与解决?高并发系统如何基于G1垃圾回收器优化性能?支付宝:支付宝三面:JVM性能调优都做了什么?小米:有做过J原创 2021-02-05 15:01:59 · 341 阅读 · 0 评论 -
Java类加载
2. 类加载 2. 类加载1. jvm内存结构概述2. 类加载子系统2.3 初始化阶段:3. 类加载器的分类4. 用户自定义加载器5. ClassLoader 常用方法6. 双亲委派机制7. 沙箱安全机制1. jvm内存结构概述jvm运行,有哪些重要的组件,如下图共可分成三个大类将class 文件 加载到内存的加载系统class 存储区域,程序运行时内存jvm读取class字节码,执行解释class命令的 执行引擎2. 类加载子系统当代码写完,编译成字节码 class文件后,打包运行原创 2021-01-23 10:40:00 · 160 阅读 · 0 评论 -
Class字节码结构
1. 相关概念1.1字节码文件的跨平台性1.2 前端编译器1.3 举例说明查看字节码的作用2. 如何查看字节码文件3. Class 文件结构3.1 Class文件的本质3.2 Class 文件的结构划分4. 解析二进制Class文件4.3 常量池4.4 访问标识4.8 属性表集合5. 补充: javap 的使用6. Class文件结构总结1. 相关概念1.1字节码文件的跨平台性Java 语言是跨平台的(write once, run anywhere)当 Java 源代码成功编译成字节码后,如果想.原创 2021-01-23 17:01:32 · 377 阅读 · 0 评论 -
JVM调试常用指令命令 jps jstat jinfo jmap jhat jstack
JVM调试指令 JVM调试指令jps: 虚拟机进程状况工具默认查询输出本地虚拟机唯一ID输出主类函数的参数输出主类的全名输出JVM参数jstat: 虚拟机统计信息监视工具监视堆状态监视消耗时间各区最值各区百分比上次垃圾回收的原因监视新生代监视新生代最值监视老年代监视老年代最值监视永生代最值输出即时编译器信息输出被即时编译的方法jinfo: Java配置信息工具输出JVM的参数输出Java系统属性jmap: Java内存映像工具jhat: 虚拟机堆转储快照分析工具jstack: Java堆栈跟踪工具jps原创 2021-01-18 20:09:37 · 599 阅读 · 1 评论 -
JVM体系结构 JVM 架构模型 JVM生命周期 JVM 发展历程
1. JVM体系结构 1. JVM体系结构1.前言2. 虚拟机介绍3. JVM 架构模型4. JVM生命周期5. JVM 发展历程1.前言作为Java工程师 ,jvm对于 java的重要性不言而喻,但是 我们又对jvm了解多少Java的跨平台性java发布的口号 “一处编译到处运行 ” 依赖于jvm,并随着jvm的发展, jvm也不仅仅只是java语言专有的运行虚拟机,相比较java语言本身,jvm更加出色。Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分。jvm只认原创 2021-01-21 18:23:10 · 272 阅读 · 0 评论