JVM
文章平均质量分 57
罗罗的1024
做个幸福的小吃货
展开
-
双括号初始化的影响
简介 我们在开发中偶尔会遇到一些小伙伴使用双括号“{{}}”来进行map或者list的初始化,类似下面示例这样 示例 public class MapTest { Map<String,Object> map = new HashMap<String,Object>(){ { put("1","one"); } }; List<Integer> list = new ArrayList<原创 2021-11-10 21:57:41 · 755 阅读 · 0 评论 -
class文件中的ConstantValue属性
先看下面的例子 会输出什么,简单啊~~~ 然而不是这样的,正确的输出应该是 tell me why? 怎么回事呢 这里就得说说变量的赋值方式啦我们先来看看 Test.class 文件的字节码吧 分析class文件,发现 static_final 经编译后已经存在于Test.class文件的常量池中,这也就是说不需要加载A.class就可以输出被static final 修饰的基本类型或者String查看A.class 文件的字节码 目前由Oracle公司实现的Javac编译器的选择是,只有同时被final原创 2021-08-19 13:01:48 · 307 阅读 · 0 评论 -
详说JVM的双亲委派机制
前面提到过的类加载阶段,这个阶段一个重要的角色就是ClassLoader(类加载器),它的主要作用就是从外界获取二进制数据流。所有的Class都是由类加载器进行加载的,因此只能影响类的加载阶段,而不能影响到其他阶段。 在标准的Java程序中,Java虚拟机会创建三类ClassLoader为整个应用程序服务 BootStrap ClassLoader Extension ClassLoader AppClassLoader 当然用户还可以自定义类加载器,以拓展Java虚拟机获取Class数据的能力。原创 2020-08-13 16:04:07 · 300 阅读 · 0 评论 -
罗罗解析Class文件的装载流程
class文件的装载流程如下,原创 2020-08-11 08:54:20 · 340 阅读 · 0 评论 -
JVM--详解分代与分区算法
前面我介绍了四种垃圾回收算法,以及它们的优势和特点。但是并没有一种算法能完全替代其他算法,这不时代在进步,技术也在进步,为了让系统的性能更优,出现了分代算法和分区算法。 分代算法 原理:根据回收对象的特性,把内存区域划分为几块,根据每块内存区间的特点,使用不同的垃圾回收算法,以提高垃圾回收效率。 一般来说,Java虚拟机会将新建的对象都放入新生代的内存区域,新生代的特性是朝生夕灭,大约90%的对象会很快被回收,所以适用于复制算法。而老年代中的对象都是从很多次垃圾回收中存活下来的,生命力极强,如果用复制算法,原创 2020-08-09 19:24:13 · 879 阅读 · 0 评论 -
深入理解JVM垃圾回收机制
垃圾回收(Garbage Collection) 垃圾回收(Garbage Collection),简称GC,就家里的垃圾筒来说,如果不断的有垃圾仍入,垃圾筒一满,我们就会倒垃圾,内存中也是一样,存在着各种垃圾,我们也需要把它清除。那么内存中的垃圾到底是什么呢?GC中的垃圾,特指存在于内存中的,不会在被使用的对象。 你可能会疑惑,如果我不清除垃圾会怎样呢? 如果内存中存在着大量垃圾,不及时回收,占着空间不放,这时要使用内存空间时,内存空间不够,很大可能就会发生内存溢出。 那么如何高效的判断垃圾、清除垃圾呢,原创 2020-08-09 17:01:06 · 382 阅读 · 1 评论 -
罗罗初探JVM
什么是虚拟机 虚拟机:是一款软件,用来执行一系列虚拟计算机指令 虚拟机可以分为系统虚拟机,程序虚拟机,vmware就属于系统虚拟机,完全就是对计算机的仿真。程序虚拟机的代表就是java虚拟机,在虚拟机中执行的指令就是java字节码指令。java虚拟机存在内存之中,看不见,和vmware不同,vmware是可以看见的。 我们来看看JVM的大概 类加载器Class Loader 负责加载class文件,class文件在文件开头有特定的文件标识(cafe babe),将class文件加载到内存中,并将这些内容原创 2020-07-11 22:03:07 · 401 阅读 · 6 评论