![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 81
达芬奇要当程序员
坚持学习每一天
展开
-
深入探讨内存泄漏的原因及解决方法
在深入讨论内存泄漏的原因之前,我们先来了解一下什么是内存泄漏。内存泄漏是指程序在运行时,由于一些错误或设计缺陷,未能正确释放已经分配的内存,导致这部分内存无法再被程序使用,却也无法被操作系统回收。随着程序运行的时间增长,这种未释放的内存会不断累积,最终导致系统的内存耗尽,引发程序崩溃或系统变慢等问题。原创 2024-01-15 09:22:13 · 3659 阅读 · 0 评论 -
Java中四种引用类型(强、软、弱、虚)
Java中的引用类型提供了不同级别的引用强度,影响对象的生命周期和垃圾回收。强引用是最常见的,只有在引用消失后对象才会被回收;软引用和弱引用对内存敏感,允许在内存不足时回收对象;虚引用则用于对象被回收时进行跟踪。合理使用这些引用类型能够更好地管理内存和对象生命周期,确保程序运行的稳定性和性能。原创 2023-12-20 23:02:05 · 3749 阅读 · 0 评论 -
解析与预防:Java中的内存泄漏问题
内存泄漏是指程序在运行过程中,由于一些原因导致无用的对象无法被垃圾回收机制及时释放,最终导致程序占用的内存不断增加,最终耗尽可用内存资源。在Java中,由于具有垃圾回收机制,内存泄漏的发现可能相对较晚,但其潜在威胁仍然存在。内存泄漏是Java开发中一个容易被忽视但又影响应用性能和稳定性的重要问题。通过理解内存泄漏的原因、使用内存分析工具和采取预防措施,开发人员可以更好地管理内存,确保应用程序的健壮性和可维护性。及时的发现和处理内存泄漏问题是优化应用程序性能的重要一环。原创 2023-12-06 09:47:52 · 3940 阅读 · 0 评论 -
一篇博客带你了解JVM中的双亲委派模型
每个类加载器实例都有一个父类加载器(除了根加载器,它没有父类加载器)。当一个类加载器需要加载一个类时,它首先会委派给它的父类加载器去尝试加载。只有当父类加载器无法加载该类时,子加载器才会尝试加载类。原创 2023-11-27 15:08:24 · 2623 阅读 · 0 评论 -
访问对象的方式
创建对象自然是为了后续使用该对象,我们的Java程序会通过栈上的reference数据来操作堆上的具体对象。由于reference类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用,并没有定义这个引用应该通过什么方式去定位、访问到堆中对象的具体位置,所以对象访问方式也是由虚拟机实现而定的,主流的访问方式主要有使用。原创 2023-11-25 16:32:57 · 2740 阅读 · 0 评论 -
对象的内部结构
在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。原创 2023-11-25 16:27:41 · 2719 阅读 · 0 评论 -
JVM中如何实现垃圾收集
垃圾收集的主要目标是自动化内存管理,使开发人员无需显式地释放不再使用的内存,从而降低了内存泄漏的风险。如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。在引用追踪过程中,垃圾收集器标记所有可达的对象。垃圾收集器在标记阶段之后,对被标记为垃圾的对象进行回收和内存释放的过程。原创 2023-11-24 11:27:24 · 1297 阅读 · 0 评论 -
类加载器“如果我定义了一个类名与Java核心类类名相同,那它还能被加载吗?”
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。当虚拟机遇到与核心类同名的类时,由于双亲委派模型,启动类加载器已经加载了这个核心类,因此不会再委派给应用程序类加载器加载你定义的同名类,从而导致你定义的类不会被加载。,优先委派给父类加载器去加载类。原创 2023-11-24 10:16:13 · 944 阅读 · 0 评论 -
类加载过程
Java类加载过程包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)五个阶段。这些阶段是按照顺序逐步执行的。这五个阶段共同构成了Java类加载的过程。需要注意的是,类加载过程是动态的,可以在运行时通过反射等机制动态加载类。类的生命周期是在加载类之后进行使用再卸载。原创 2023-11-23 11:03:52 · 1020 阅读 · 0 评论 -
JVM中判断对象是否需要回收的方法
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。原创 2023-11-22 14:53:32 · 1485 阅读 · 0 评论