
深入理解JVM虚拟机
文章平均质量分 78
wtopps
当你的才华满足不了你的野心时,你应该滚去学习
展开
-
JVM问题排查手册
内存使用率不断上升,甚至开始使用 SWAP 内存,同时可能出现 GC 时间飙升,线程被 Block 等现象。中添加VM参数(在生产环境请谨慎!top发现JAVA实际占用的RES。原创 2024-01-25 11:24:56 · 627 阅读 · 0 评论 -
什么是GraalVM
需要注意的是,GraalVM 的预编译器只适用于一些特定的应用程序场景,例如无状态的函数式服务或命令行工具等,而不适用于那些需要动态修改代码或依赖于动态加载模块的应用程序。需要注意的是,由于每个应用程序都是独特的,因此需要根据具体的应用程序进行评估和调整,以实现最佳的迁移方案。避免使用反射:在 OpenJDK 中,使用反射可以访问或修改私有字段和方法,但是在 GraalVM 中,由于它的 AOT 编译器需要知道所有的代码路径,因此无法动态解析反射调用,这也可能会导致兼容性问题。原创 2023-12-05 10:13:34 · 1774 阅读 · 0 评论 -
浅谈JVM GC三色标记算法
浅谈JVM GC三色标记算法“同学,可以讲一下JVM的GC三色标记算法吗?”“额……这个……这是啥……不了解”这几天逛脉脉,有的网友提到面试的时候面试官问到了JVM GC的三色标记算法,好吧,看来Java面试真的已经是卷的飞起来,都开始问这种问题了……那么今天,我们就来简单聊聊JVM的GC三色标记算法。三色标记算法三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。三色标记可以简洁地描述回收过程中对象状态的变原创 2021-03-12 18:59:46 · 1914 阅读 · 0 评论 -
闲谈JVM(八):深入理解JVM GC Roots
文章目录前言GC Roots前言在上一篇中,我们对CMS收集器的工作原理进行了详细分析,在分析CMS执行垃圾回收的过程中,提及到了GC Roots的概念,本篇,我们对GC Roots进行展开,详细分析一下JVM中的GC Roots。GC RootsJVM在进行垃圾回收时,如何判断一个对象是否可以被回收,是通过可达性分析来判定对象是否存活的。如上图所示,JVM通过GC Roots来进行判断一个对象是否可以被进行回收。所谓GC Roots,或者说Tracing GC的“根集合”,就是一组必须活跃的原创 2020-10-21 16:02:58 · 2302 阅读 · 0 评论 -
闲谈JVM(七):浅谈JVM GC之CMS GC
文章目录前言CMS GCCMS收集执行过程初始标记并发标记并发预清理重标记并发清理并发重置GC ROOTCMS的弊端前言在上一篇中,我们对JVM的垃圾回收机制进行了整体的概述,了解了JVM中GC的种类, 本篇,我们对其中的一个GC收集器进行详细的探讨,即目前使用最为广泛的GC收集器——CMS GC。CMS GCOralce官方对CMS的定义:The Concurrent Mark Sweep (CMS) collector is designed for applications that pr原创 2020-10-16 16:38:16 · 710 阅读 · 0 评论 -
闲谈JVM(六):JVM垃圾回收概述
文章目录前言JVM垃圾回收机制何为垃圾为何分代管理生代内存分配吞吐量 VS 暂停时间吞吐量(throughput)暂停时间(pause times)垃圾收集器种类新生代收集器老生代收集器Partial GC VS Full GC结语前言本篇,我们聊聊JVM的垃圾回收机制。JVM垃圾回收机制众所周知,Java语言的核心特性之一,就是JVM的垃圾回收(GC)机制,可以让开发者无需关注程序的内存分配问题,将这部分琐碎且容易出错的操作交给JVM来进行处理。但是这并不代表着作为开发者不需要去了解JVM的垃圾原创 2020-10-14 18:14:38 · 272 阅读 · 0 评论 -
闲谈JVM(五):浅谈ClassLoader
文章目录前言ClassLoaderClassLoader体系ClassLoader在加载类时的概念区分ClassLoader常见问题NoClassDefFoundErrorNoSuchMethodErrorClassCastException结语前言在前几篇中,闲谈JVM(四):浅谈CodeCache与JIT闲谈JVM(三):浅析本地元空间参数配置闲谈JVM(二):浅析新老生代参数配置闲谈JVM(一):浅析JVM Heap参数配置我们对JVM最主要区域的常用参数的配置进行了介绍了解,本篇,我们原创 2020-09-23 17:24:54 · 359 阅读 · 0 评论 -
闲谈JVM(四):浅谈CodeCache与JIT
文章目录前言CodeCacheCodeCache参数配置InitialCodeCacheSizeReservedCodeCacheSizeXmaxjitcodesizeCodeCacheMinimumFreeSpace前言在前几篇中,我们对JVM最主要区域的常用参数的配置进行了介绍了解,涵盖了新生代、老生代、本地元空间(老年代)等区域,本篇,我们继续了解JVM中的另一个区域,CodeCache。CodeCacheJVM里有一块比较特殊的内存叫做CodeCache,Java代码在执行时一旦被编译器编译原创 2020-07-02 16:18:56 · 2648 阅读 · 0 评论 -
闲谈JVM(三):浅析本地元空间参数配置
文章目录前言永生代Perm永生代Perm参数配置PermSizeMaxPermSize本地元空间(MetaSpace)MetaspaceSizeMaxMetaspaceSizeCompressedClassSpaceSizeInitialBootClassLoaderMetaspaceSizeMetaspaceSize真正大小结语前言在之前的两篇中,闲谈JVM(一):浅析JVM Heap参数配置闲谈JVM(二):浅析新老生代参数配置我们对JVM Heap中的两个区域,新生代与老生代进行了介绍,了解原创 2020-06-08 18:59:34 · 1465 阅读 · 1 评论 -
闲谈JVM(二):浅析新老生代参数配置
前言在上一篇中,我们介绍了JVM中Heap区的基本参数设置,可以参见:闲谈JVM(一):浅析JVM Heap参数配置在Heap区中,又被划分为几个区域,分别为新生代与老生代,而我们知道,绝大多数的对象都是“朝生夕死”的,在新生代阶段就会被回收掉,由此可以看出,新生代是非常重要的一个区域,本篇,我们就来了解一下新生代相关的参数配置。Heap区新生代在最开始,我们还是来看一下JVM的内存模型:从上图中可以看到,Heap区由新生代与老生代组成,而新生代的比重也是比较大的,而进一步细分,新生代中又可以分原创 2020-05-29 18:36:22 · 856 阅读 · 0 评论 -
闲谈JVM(一):浅析JVM Heap参数配置
文章目录前言JVM内存模型堆(Heap)配置Xms与InitialHeapSizeXmx与MaxHeapSizeHeap的缺省配置Default Heap SizeClient JVM Default Initial and Maximum Heap SizesServer JVM Default Initial and Maximum Heap Sizes堆(Heap)的动态调整Heap大小配置建议结语前言JVM是Java语言的核心基石所在,它为Java提供了强大的跨平台能力,关于JVM的内部结构,想原创 2020-05-22 18:01:00 · 7219 阅读 · 2 评论 -
深入理解JVM虚拟机:(六)虚拟机类加载机制(下)
前言上一章中深入理解JVM虚拟机:(五)虚拟机类加载机制(上),我们介绍了虚拟机的类加载机制,这一章,我们继续聊类加载机制。解析解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,符号引用在前一章讲解Class文件格式的时候已经出现过了多次,在Class文件中它以CONSTANT_Class_info、CONSTAN)Fieldref_info、CONSTANT_Methodre...原创 2018-07-03 16:20:45 · 1005 阅读 · 3 评论 -
深入理解JVM虚拟机:(五)虚拟机类加载机制(上)
前言在之前的几章中, 深入理解JVM虚拟机:(一)Java运行时数据区域 深入理解JVM虚拟机:(二)垃圾收集器概述 深入理解JVM虚拟机:(三)类文件结构(上) 深入理解JVM虚拟机:(四)类文件结构(下) 我们了解了Java虚拟机的内存模型、垃圾回收机制、Class文件结构,本章我们将了解一下Java虚拟机的类加载机制。概述虚拟机把描述类的数据从Class文件加载到内存,...原创 2018-06-24 22:20:51 · 766 阅读 · 0 评论 -
深入理解JVM虚拟机:(四)类文件结构(下)
前言上一篇 深入理解JVM虚拟机:(三)类文件结构(上) 中我们介绍了Java的类文件结构,这一篇我们继续来看Java其他的类文件结构。字段表集合字段表用于描述接口或者类中声明的变量。字段包括类级变量以及实例级变量,但不包括在方法内部声明的局部变量。我们可以想一想在Java中描述一个字段可以包含什么信息?可以包括的信息有:字段的作用域(private、protect、public修饰符...原创 2018-06-08 22:40:35 · 595 阅读 · 0 评论 -
深入理解JVM虚拟机:(三)类文件结构(上)
前言在上一篇深入理解JVM虚拟机:(二)垃圾收集器概述 文章中,我们了解了Java虚拟机中垃圾收集器的种类以及垃圾回收的方式等,这一篇,我们将去了解一下Java中类文件的内部构造,由于这一章比较抽象,因此将会分为两篇文章进行讲解。概述代码编译的结果是从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步。我们都只带Java是一门跨平台的语言,其在诞生之初,就提出了一...原创 2018-05-31 23:13:54 · 731 阅读 · 0 评论 -
深入理解JVM虚拟机:(二)垃圾收集器概述
前言在上一篇深入理解JVM虚拟机:(一)Java运行时数据区域 文章中,我们了解到了Java运行时的数据区域,这一篇,我们将会去了解一下Java的垃圾回收机制。概述说起垃圾收集器,大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java更加悠久,Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言,一直以来,人们就在思考GC需要完成的3件事情:哪些内存需要...原创 2018-05-26 15:32:57 · 606 阅读 · 0 评论 -
深入理解JVM虚拟机:(一)Java运行时数据区域
概述JVM是Java语言的精髓所在,因为它Java语言实现了跨平台运行,以及自动内存管理机制等,本文将从概念上介绍JVM内存的各个区域,说明个区域的作用。JVM运行时数据区模型Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成若干个不同的数据区域,这些数据区域都有各自的用途,以及创建和销毁时间,Java虚拟机所管理的内存将会包括以下几个运行时数区域程序计数...原创 2018-04-23 22:36:09 · 1621 阅读 · 1 评论