![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 92
对JVM的系统性的学习和总结。
如不來
知幻即离,不假方便;离幻即觉,亦无渐次。
展开
-
记一次TheadLocal使用方式不正确导致内存泄漏问题的排查和修复过程
又再通过Jprofiler查看宕机时的线程的情况,定位到了出现问题的线程,然后查看代码,发现代码中有一个使用流的地方,但这个流在使用完之后没有关闭,就误以为是流未关闭导致的。代码的本意是想避免对象的多次反序列化,想将已经反序列化过的对象放在一个全局的Map里面,下次如果这个Map中已经有了该对象就直接从Map里面获取,若没有则先将该对象反序列化之后置入这个Map中,再从该Map中获取。在将内存溢出的dump文件导出之后,通过Jprofiler进行分析,发现HashMap对象占用的内存很大,而且一直在增加。原创 2023-10-20 18:26:48 · 260 阅读 · 0 评论 -
JVM——04运行时数据区(2)
一、堆 一个Java进程会创建一个JVM实例,一个JVM实例中会有一个堆和一个方法区,堆和方法区在该进程中的所有线程中是共享的。堆是Java内存管理的核心区域。 Java堆区在JVM启动的时候被创建,创建时其空间大小也就确定了(堆内存的大小在JVM启动前是可以设置的),堆应该说是JVM管理的最大的一块内存空间。&...原创 2020-11-02 23:58:09 · 616 阅读 · 0 评论 -
JVM——03运行时数据区(1)
一、运行时数据区概述 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存的申请、分配、管理等的策略,虽然不同的JVM对于内存的划分方式和管理机制存在着部分差异,但目的都是保证JVM的高效稳定运行。 如上图所示:Java虚拟机定义了若干种程序运行其间会使用到的运行时数据区,其中红色部分(即方法区和堆)会随着虚拟机启动而创建,随着虚拟机退出而销毁,是线程共享的。灰色部分(程序计数器、虚拟机栈和本地方法栈)则是与线程一一原创 2020-10-07 23:28:07 · 122 阅读 · 0 评论 -
JVM——02类加载子系统
一、JVM的内存结构 详细的内存结构图: 这个结构图基本上反映了Java代码的执行过程:先是类加载器将编译好的字节码文件加载到JVM的方法区,加载包括加载阶段、链接阶段和初始化阶段,然后由执行引擎执行,在执行的过程中会根据方法的调用产生对应线程的虚拟机栈和程序计数器以及本地方法栈等。二、类加载子系统 类加载子系统负责从文件系统或者网络中加载.class文件,.class文件在文件开头有特定的文件标识。 ClassLoader只负责.class文件的加载,至于它是否可以运行,则由Executi原创 2020-09-28 23:25:28 · 238 阅读 · 0 评论 -
JVM——01JVM简介
一、JVM的定位 从Oracle官网中Java语言的架构图上可以看到JVM是Java语言的基石,所有的原创 2020-09-26 23:39:18 · 446 阅读 · 0 评论