![](https://img-blog.csdnimg.cn/20201028000140690.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
文章平均质量分 95
java内存模型,java虚拟机底层学习。
徐同学呀
致力于java底层、源码、中间件、后端领域学习和探索。热爱源码,热爱生活,持续改进,坦诚合作!
展开
-
Java双亲委派模型:为什么要双亲委派?如何打破它?破在哪里?
1. 双亲委派就是类加载器之间的层级关系,加载类的过程是一个递归调用的过程,首先一层一层向上委托父类加载器加载,直到到达最顶层启动类加载器,启动类加载器无法加载时,再一层一层向下委托给子类加载器加载。2. 双亲委派的目的主要是为了保证`java`官方的类库`\lib`和扩展类库`\lib\ext`的加载安全性,不会被开发者覆盖。...原创 2021-06-01 23:11:31 · 15719 阅读 · 29 评论 -
双亲委派模型
双亲委派模型类与类加载器双亲委派模型虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块被称为“类加载器”。类与类加载器类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本...原创 2019-03-11 13:47:46 · 256 阅读 · 0 评论 -
类加载的过程
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如图所示。加载、验证、准备、初...原创 2019-03-11 13:21:40 · 408 阅读 · 0 评论 -
内存分配与回收策略
内存分配与回收策略(1)对象优先在Eden分配(2)大对象直接进入老年代(3)长期存活的对象将进入老年代(4)动态对象年龄判定(5)空间分配担保(1)对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。(2)大对象直接进入老年代所谓大对象就是指,需要大量连续内存空间的Java对象,最典型的大对象就是那种很...原创 2019-03-11 11:25:06 · 259 阅读 · 0 评论 -
垃圾收集器
垃圾收集器1、Serial收集器(单线程、复制算法)2、Serial Old收集器(单线程、标记-整理算法)3、ParNew收集器(多线程、复制算法)4、Parallel Scavenge收集器(多线程、复制算法)5、Parallel Old收集器(多线程、标记-整理算法)6、CMS收集器(并发、低停顿、标记-清楚算法)7、G1收集器(标记-整理算法)如果说收集算法是内存回收的方法论,垃圾收集器...原创 2019-03-11 11:20:42 · 354 阅读 · 0 评论 -
垃圾收集算法
垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的。它的主要缺点有两个:一个是效率问题,标记和清除过程的效...原创 2019-03-11 10:44:49 · 269 阅读 · 0 评论 -
回收方法区
很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此。永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。回收废弃常量与回收Java堆中的对象非...原创 2019-03-11 10:35:46 · 515 阅读 · 0 评论 -
对象最后一次自我救赎——finalize()
在根搜索算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行根搜索后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都...原创 2019-03-11 10:32:56 · 670 阅读 · 0 评论 -
四大引用——强引用、软引用、弱引用、虚引用
强引用、软引用、弱引用、虚引用强引用软引用弱引用虚引用在JDK 1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)四种,这四种引用强度依次逐渐减弱。强引用就是指在程序代码之中普遍存在的,类似Object obj=new O...原创 2019-03-11 10:26:02 · 459 阅读 · 0 评论 -
如何判断对象已死——引用计数算法与根搜索算法
引用计数算法与根搜索算法引用计数算法根搜索算法引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。客观地说,引用计数算法(Reference Counting)的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软的COM(Component...原创 2019-03-11 10:20:42 · 552 阅读 · 0 评论