JVM
文章平均质量分 85
一年春又来
这个作者很懒,什么都没留下…
展开
-
Jvm-08a.类加载器
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。[[双亲委派模型.png]]通俗的讲就是比较两个类是否"原创 2023-05-17 15:22:09 · 670 阅读 · 1 评论 -
Unsafe类的使用
Unsafe可用来直接访问系统内存资源并自主管理,在提升Java运行效率、增强Java语言底层操作能力方面起了很大的作用——可以认为,Unsafe类是Java中留下的后门,提供了一些低层次操作,如直接内存访问、线程调度等。...原创 2022-06-30 16:32:41 · 916 阅读 · 1 评论 -
JDK 11统一日志管理
可使用-Xlog选项,启用统一日志管理。Xlog选项支持的参数如下:-Xlog:使用info级别启用JVM日志-Xlog:help:打印Xlog帮助文档-Xlog:disable:关闭所有日志记录并清除日志记录框架的所有配置,包括警告和错误的默认配置-Xlog[:option]:按照命令行上出现的顺序应用多个参数。同一输出的多个参数按其给定顺序覆盖。option的格式为:其中:what:指定level和tag的组合,格式: 。除非用 指定了通配符,否则只有匹配了指定tag的日志消息才会被匹配。outpu原创 2022-06-24 14:35:44 · 1357 阅读 · 0 评论 -
JVM参数选项
title: “JVM JDK8的JVM参数”date: 2022-03-16T17:08:55+08:00draft: true本文参数基于JDK 8整理收集器参数及默认值备注Serial-XX:+UseSerialGC虚拟机在Client模式下的默认值,开启后,使用 Serial + Serial Old 的组合ParNew-XX:+UseParNewGC开启后,使用ParNew + Serial Old的组合-XX:ParallelGCThre.原创 2022-03-16 17:21:17 · 977 阅读 · 0 评论 -
JVM 垃圾收集器
title: “JVM 垃圾收集器”date: 2022-03-11T16:45:21+08:00draft: false文章目录引言术语垃圾收集器介绍Serial 收集器(新生代)ParNew收集器(新生代)Parallel Scavenge收集器(新生代)Serial Old 收集器(老年代)Parallel Old 收集器(老年代)CMS 收集器(老年代)G1 收集器G1 收集器 VS CMS收集器链接引言下面这张图是 Java 中比较主流的基于分代收集理论的垃圾收集器,以及它们能够作用.原创 2022-03-16 16:14:43 · 1118 阅读 · 0 评论 -
JVM 垃圾回收算法
title: “JVM 垃圾回收算法”date: 2022-03-01T17:19:01+08:00draft: true0 概述基础垃圾算法:标记-清除、标记-整理、复制综合垃圾回收算法:分代收集算法、增量算法1 标记-清除(Mark-Sweep)标记需要回收的对象清理掉要回收的对象缺点:垃圾回收之后会存在内存碎片2 标记-整理(Mark-Compact)标记需要回收的对象把所有的存活对象压缩的内存的一端清理掉边界外的所有空间这个算法可以避免.原创 2022-03-11 16:41:43 · 980 阅读 · 0 评论 -
JVM 垃圾回收算法
0 概述基础垃圾算法:标记-清除、标记-整理、复制综合垃圾回收算法:分代收集算法、增量算法1 标记-清除(Mark-Sweep)标记需要回收的对象清理掉要回收的对象缺点:垃圾回收之后会存在内存碎片2 标记-整理(Mark-Compact)标记需要回收的对象把所有的存活对象压缩的内存的一端清理掉边界外的所有空间这个算法可以避免标记-清除算法会产生的内存碎片3 复制(Copy)把内存分为两块,每次只使用一块把当前使用的内存中的存活对象复制到未原创 2022-03-03 22:55:59 · 238 阅读 · 0 评论 -
JVM 垃圾回收
概述什么场景下该使用什么垃圾回收策略?垃圾回收发生在哪些区域?对象在什么时候能够被回收?什么场景下该使用什么垃圾回收策略?场景一:在对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存;场景二:在CPU 使用率高的场景下:降低高并发垃圾回收的频率,让 CPU 更多地去执行你的业务而不是垃圾回收;TODO 垃圾回收策略垃圾回收发生在哪些区域?JVM 内存结构如下图所示:虚拟机栈、本地方法栈、程序计数器是线程隔离的,这 3 个区域与线程的生命原创 2022-03-01 16:55:56 · 291 阅读 · 0 评论 -
JVM 编译器优化
文章目录1 编译器优化1.1 字节码是如何运行的?1.2 Hotspot 的即时编译器 C11.3 Htospot 的即时编译器 C21.4 分层编译1.5 分层编译- JVM参数配置示例1.6 如何找到热点代码?思路?1.7 Hotspot 内置的两类计数器1.8 方法调用计数器流程1.9 回边计数器流程1.10 方法内联1.10.1 什么是方法内联?示例?1.10.2 发生方法内联的条件1.10.3 使用方法内联的注意点:1.10.4 方法内联可能带来的问题1.10.5 内联相关JVM参数1.10.6原创 2022-02-15 16:34:59 · 1059 阅读 · 0 评论 -
JVM 分代收集理论
title: “JVM 分代收集理论”date: 2022-01-20T11:58:09+08:00draft: false分代收集理论当前大多数的虚拟机都遵循了“分代收集”的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,它建立在两个分代假说之上:1)弱分代假说:绝大多数对象都是朝生夕灭的。2)强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。这两个假说共同奠定了多款常用垃圾收集器的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依.原创 2022-01-20 15:59:55 · 398 阅读 · 0 评论 -
内置故障排查工具-jinfo
title: 内置故障排查工具-jinfodate: 2021-08-10 11:20:40tags:JVMJava监控工具jinfo作用jinfo全称Java Configuration Info,主要用来查看与调整JVM参数。TIPS此命令是实验性的,不受支持,对于JDK 9及更高版本,部分功能可使用 jhsdb jinfo 代替,也可用jcmd代替。部分JDK版本的jinfo命令对Windows支持比较有限,参数较少。本文为了更加接近生产环境,都是基于类Unix操作系.原创 2021-08-10 11:23:32 · 269 阅读 · 0 评论 -
编译器优化
上一篇文章文章目录1.3 编译器优化1.3.1 字节码是如何运行的?1.3.2 Hotspot 的即时编译器 C11.3.3 Htospot 的即时编译器 C21.3.4 分层编译1.3.5 分层编译- JVM参数配置示例1.3.6 如何找到热点代码?思路?1.3.7 Hotspot 内置的两类计数器1.3.8 方法调用计数器流程1.3.9 回边计数器流程1.3 编译器优化1.3.1 字节码是如何运行的?解释执行:由解释器一行一行翻译执行优势在于没有编译的等待时间性能相对差一些编译原创 2021-08-09 23:53:11 · 292 阅读 · 0 评论 -
内置监控工具 - jstat
title: 内置监控工具 - jstatdate: 2021-08-05 09:52:54tags:JVMJava监控工具内置监控工具 - jstat作用jstat全称JVM Statistics Monitoring Tool,用于监控JVM的各种运行状态。TIPS此命令是实验性的,不受支持。参考文档:Java 8:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.htmlJava 1.原创 2021-08-05 09:54:57 · 240 阅读 · 0 评论 -
JVM之对象的创建过程
title: JVM之对象的创建过程date: 2021-07-09 17:11:23tags: JVM1 前言Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?常量池中定位类的符号引用检查符号引用所代表的类是否已被加载,解析和初始化过。如果没有,那必须先执行.原创 2021-07-10 12:14:26 · 561 阅读 · 1 评论 -
编译JDK
title: 编译JDKdate: 2021-07-06 11:06:55categories: Java虚拟机tags:jdkjvm1 macOS 编译 OpenJDK目标:编译 OpenJDK171.1 准备编译环境首先去应用商店安装 xcode.app安装 JDK16(比要编译的JDK低一个版本,如要编译的openjdk17,那就安装jdk16)brew install freetype ccache1.2 开始编译1.2.1 bash configureba.原创 2021-07-06 19:10:51 · 306 阅读 · 1 评论 -
JVM 类加载过程(2)
文章目录1.3 类加载机制1.3.1 编译1.3.2 加载1.3.3 链接1.3.3.1 验证1.3.3.2 准备1.3.3.3 解析1.3.4 初始化1.3.5 使用1.3.6 卸载1.3.7 小节1.3 类加载机制1.3.1 编译javac JVMTest1.java结果产生了两个 class 文件,如下所示:JVMTest1.class//// Source code recreated from a .class file by IntelliJ IDEA// (powered原创 2021-02-24 22:25:19 · 724 阅读 · 0 评论 -
JVM 内存结构简单分析(1)
文章目录JVM 内存结构简单分析内存结构堆虚拟机栈本地方法栈程序计数器方法区JVM 内存结构简单分析内存结构线程共享:堆,方法区线程隔离:虚拟机栈,本地方法栈,程序计数器堆堆又做了细分如下图所示:JDK8 之前堆分为新生代、老年代和持久代(也叫永久代),其中新生代中又有伊甸园和存活区,而存活区又分为 “From survivor” 和 “To survivor”。JDK8 之后,持久代被废弃,由元空间代替,而元空间并不是堆内存的一部分,元空间是本地内存。虚拟机栈虚拟机栈是线程独享原创 2021-02-23 22:17:04 · 460 阅读 · 1 评论