JVM
文章平均质量分 72
JVM
dying 搁浅
这个作者很懒,什么都没留下…
展开
-
JDK 8 升级 JDK 17 全流程教学指南
可能大部分同学都不是完全了解自己的项目都依赖了什么包,这个升级工作一定会加深你对 maven 包管理的理解,以及你对你项目依赖的熟悉程度和你解决排查问题的能力。顺便提一个 springbean 加载的问题,如果你引入的三方包有路径下的 bean 需要你进行注册管理,你项目启动类的扫描路径下需要包含他的路径,比如。com.alibaba.dubbo ,然后我想一起升级到 org.apache.dubbo ,结果找不到了,想来是路径的问题,老的都是继承的。这个找不到类,找到对应的调用位置,看看为啥没有。原创 2023-08-09 17:38:52 · 9501 阅读 · 3 评论 -
快速了解 Java 类加载机制 & 双亲委派
阅读本篇,希望你有一定基础C++ 代码执行 --> 创建 JVM 虚拟机 --> 初始化类加载器 --> 从磁盘把类加载到内存 --> 运行 main 方法你需要关心 JVM 虚拟机是如何创建的吗?不!你只关心你自己。原创 2022-11-03 18:35:09 · 277 阅读 · 0 评论 -
什么是 “零” 拷贝?
对于 Java 来说系统的内存分为两部分 堆内存 和 堆外内存 。堆外内存也叫 直接内存。了解 JVM 的同学应该都知道,JVM 元空间的数据就是存储在 直接内存 中的。原创 2022-10-24 17:43:57 · 1774 阅读 · 0 评论 -
JVM 垃圾收集器 G1 详解
这是一篇欠了自己很久的文章吧,一直想写一篇关于垃圾收集器 G1 的总结文章,却迟迟没有下笔哈哈,本篇将深入浅出带大家看看 G1 究竟给我们程序的垃圾收集带来了什么。原创 2021-10-05 13:02:06 · 1675 阅读 · 3 评论 -
如何对你的 Elasticsearch JVM 进行 dump 分析 ?
玩了这么久 ES ,还不会对 JVM 内存 dump 进行分析吗??不会吧?不会吧? 不会还有人不会吧~还不快点进来学?!!原创 2021-04-03 21:13:44 · 900 阅读 · 0 评论 -
G1 对于 CMS 到底做了哪些优化
G1 垃圾收集器对于 CMS 来说 G1 究竟改进了什么呢?区域块级化,增加 H 区 。(大对象,巨型对象区)优化垃圾回收清理阶段的逻辑。由用户控制最大 STW 时间,优化用户体验。G1 的垃圾回收过程为初始标记 -> 并发标记 -> 最终标记 -> 筛选回收其中最重要的改变是筛选回收过程变为 STW而且为什么叫做筛选回收呢,它维护一个优先级列表 根据用户设置的最大 STW 时间 选取回收收益最大的 Region 区域进行回收,也就是可能每次的垃圾回收是不一定能完全回收原创 2021-01-03 10:55:09 · 1131 阅读 · 0 评论 -
垃圾收集器之 ParNew 与 CMS
大纲一、垃圾收集算法说到垃圾收集器必然离不开垃圾收集算法。垃圾收集算法时基于分代收集理论的。即一般我们的堆区域都有年轻代、老年代之分,这样区分的目的主要是将不同生命周期的对象区分开来,比如朝生夕死的对象都在年轻代,而长久存在的对象会存储在老年代,这样来进行不同的有针对性的垃圾收集处理更加高效,比如年轻代的朝生夕死的对象用复制算法来进行收集效率会很高,而老年的长久存活的对象对于内存要求很高就不适合复制算法,这个适合会在标记清除算法和标记整理算法中选择一个较为合适的来进行处理,其中复制算法要快于其他两原创 2020-10-23 08:45:13 · 3066 阅读 · 2 评论 -
JVM 对象创建与内存分配深度解析(二)之 对象内存分配详解
对象内存分配一个对象在进行内存分配的过程是比较复杂的,我们一般都理解为 JVM 在进行对象内存分配的时候会将对象直接分配到堆上,其实不然,真实的流程是 JVM 会尝试先在栈上分配,栈上无法分配时才会去到堆上分配,整体流程看下图。栈上分配对于对象栈上分配,它可以缓解堆内存的压力以及 gc 的次数。并不是所有的对象都会尝试到栈上去分配,JVM 会对其进行逃逸分析逃逸分析逃逸分析的过程就是在寻找逃逸对象和非逃逸对象。非逃逸对象即在方法内的对象其没有在外部被使用到,只在方法中被调用使用,其生命周期和方法原创 2020-10-03 12:56:46 · 291 阅读 · 0 评论 -
JVM 对象创建与内存分配深度解析(一)
一、对象的创建一个对象创建的过程需要经历1. 类加载检查在执行一个 new 指令的时候,Java 虚拟机首先会到常量池中寻找是否存在有当前指令参数的类的符号引用,并且检查该类是否执行过加载,解析,初始化等操作,如果没有则执行类的加载过程。2. 内存分配通过类加载检查之后,类所占用的内存大小就可以确定了,这个时候需要对该类进行内存分配。对于对象的内存分配是一个较为复杂的流程,在这里我们先可以简单的将这个过程理解为,在堆中划分一块确定大小的内存空间。在这里我们需要了解的是如何划分内存,以及在并发原创 2020-09-30 10:39:19 · 408 阅读 · 0 评论 -
JVM 内存模型剖析
一、JDK 体系结构JDK (Java Development Kit)即我们最常用的 Java 开发工具包。JDK 包括了 JRE (Java Runtime Environment) 即 Java 运行时环境。从上图可以看出 JRE 就包含了我们的 JVM 以及各种我们常用的核心类库。而 JDK 在其上由拓展了工具命令,例如 java javac javap 这些常用命令。二、 Java 语言的跨平台特性Java 的跨平台特性主要时 JVM 虚拟机的功劳,我们在不同平台执行 Java 程序时都原创 2020-09-11 09:48:13 · 216 阅读 · 0 评论 -
JVM 类加载机制深度剖析(JDK 1.8)
JVM 类加载整体流程整体的类加载流程如下图所示:例如我想要加载一个Demo 类:首先会先启动 JVM 虚拟机(JVM 虚拟机底层是由 C++ 来实现的,在 windows 下启动即为 java.exe 方法调用 jvm.dll 创建 JVM)由 JVM 虚拟机创建 引导类加载器(同样底层为 C++ 实现)该引导类加载器会去创建 JVM 启动类 sun.misc.Launcher 类实例。通过调用 sun.misc.Launcher.getLauncher() 方法,该方法会返回 Launc原创 2020-08-29 10:22:22 · 1802 阅读 · 0 评论