jvm
文章平均质量分 89
Java烂猪皮V
专注于分享Java后端架构核心技术知识点以及最新面试宝典。
展开
-
【40】阿里面试常问:聊聊JVM虚拟机中init和clinit的区别?
在jvm第一次加载文件时调用,包括静态变量初始化语句和静态块的执行。:在实例创建出来的时候调用,包括调用new操作符;调用Class或对象的方法;调用任何现有对象的方法;通过类的方法反序列化。是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的方法时才会执行init方法,而是类构造器方法,也就是在jvm进行类加载—–验证—-解析—–初始化,中的初始化阶段jvm会调用方法。是实例构造器,对非静态变量解析初始化,而是class类构造器对静态变量,静态代码块进行初始化。原创 2023-05-28 14:56:29 · 210 阅读 · 5 评论 -
Java虚拟机:如何判定哪些对象可回收?
在堆内存中存放着Java程序中几乎所有的对象实例,堆内存的容量是有限的,Java虚拟机会对堆内存进行管理,回收已经“死去”的对象(即不可能再被任何途径使用的对象),释放内存。垃圾收集器在对堆内存进行回收前,首先要做的第一件事就是确定这些对象中哪些还存活着,哪些已经死去。Java虚拟机是如何判断对象是否可以被回收的呢?引用计数算法引用计数算法的原理是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;在任何时刻计数器的值为0的对象就是不可能...原创 2021-02-06 01:47:57 · 251 阅读 · 0 评论 -
Java虚拟机:GC算法深度解析
在前面的文章里介绍了可达性分析算法,它为我们解决了判定哪些对象可以回收的问题,接下来就该我们的垃圾收集算法出场了。不同的垃圾收集算法有各自不同的优缺点,在JVM实现中,往往不是采用单一的一种算法进行回收,而是采用几种不同的算法组合使用,来达到最好的收集效果。接下来详细介绍几种垃圾收集算法的思想及发展过程。最基础的收集算法 —— 标记/清除算法之所以说标记/清除算法是几种GC算法中最基础的算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。标记/清除算法的基本思想就跟它的名...原创 2021-02-06 01:46:18 · 157 阅读 · 0 评论 -
Java虚拟机:JVM内存分代策略
Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。为什么要分代?堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,我们程序所有的对象实例都存放在堆内存中。给堆内存分代是为了提高对象内存分配和垃圾回收的效率。试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收都要遍历所有的对象,遍历这些对象所花...原创 2021-02-06 01:44:38 · 255 阅读 · 0 评论 -
Java虚拟机:内存分配策略
Java中提倡的自动内存管理机制最终可以归结为自动化的解决两个问题:给对象分配内存和回收分配给对象的内存。在之前的博客中已经详细讲解了内存回收体系及原理,下面我们来探讨给对象分配内存那些事儿。对象的内存分配,总体上讲就是在堆上分配,对象主要分配在新生代的Eden区,少数情况也会直接分配在老年代。分配的规则并不是百分百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数配置。对象优先在Eden区分配大多数情况下,对象在新生代Eden区分配。当Eden区没有足...原创 2021-02-06 01:42:56 · 140 阅读 · 0 评论 -
Java虚拟机:类加载机制详解
大家知道,我们的Java程序被编译器编译成class文件,在class文件中描述的各种信息,最终都需要加载到虚拟机内存才能运行和使用,那么虚拟机是如何加载这些class文件的呢?在加载class文件的过程中虚拟机又干了哪些事呢?今天我们来解密虚拟机的类加载机制。虚拟机把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Java类型(Class对象),这就是虚拟机的类加载机制。类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证...原创 2021-02-06 01:41:18 · 457 阅读 · 0 评论