jvm
努力努力再努力@x
这个作者很懒,什么都没留下…
展开
-
jvm的双亲委派机制
当我们的类加载器收到一个请求的时候,首先会向上查找最顶层的没有父类的类加载器(启动类加载器),然后会依次向下读取class文件,如果该类加载器读取到class文件的时候,子节点不会再继续读取。 ...原创 2020-09-16 11:40:55 · 181 阅读 · 0 评论 -
jvm中引用类型分类
无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引 用链是否可达,判定对象是否存活都与“引用”有关。 在JDK 1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、**虚引用(Phantom Reference)**4种,这4种引用强度依次逐渐减弱...原创 2019-12-05 15:25:24 · 113 阅读 · 0 评论 -
jvm中GCRoots根节点
在判断对象存活的时候,jvm会用可达性分析算法,其实作为根节点的就只有几个,如下: 方法区中的静态属性(静态属性指向一个对象) 方法区的中的常量(常量指向一个对象) 虚拟机中的局部变量(变量指向一个对象) 本地方法栈中JNI(native修饰的方法指向的对象) ...原创 2019-12-05 15:12:11 · 2750 阅读 · 0 评论 -
jvm垃圾收集器
目前还在整理中,后续发布,,,请期待原创 2019-12-04 16:47:50 · 57 阅读 · 0 评论 -
jvm垃圾回收算法
面试的时候有个问题很容易被问到,就是垃圾回收算法有哪几个,并且讲一下各自的原理,其实就只有4个,很简单,话不多说,直接开始: 1.标记清除算法 2. 复制算法 3. 标记压缩算法 4. 分代算法 标记清除算法 分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有 被标记的对象,它的标记过程其实在前一节讲述对象标记判定时已经介绍过了。之所以说它 是最基础的收集...原创 2019-12-04 16:43:29 · 70 阅读 · 0 评论 -
jvm判断对象存活
我们在编码的过程当中,堆的空间的利用率是有限制的,假设我们的堆空间已经快要触发GC,那么大家有没有想过,GC进行回收的时候,到底哪一类的对象才能被回收,回收的标准是那些,好的,废话不多,直接开始: 引用计数法; 可达性分析算法(根搜索法GS_Roots算法); 引用计数法的图例如下: 给对象中添加一个引用计数器,每当有 一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计...原创 2019-12-04 10:51:21 · 84 阅读 · 0 评论 -
jvm中对象的访问定位
在代码中new了一个对象,然后jvm给对象也分配好了内存,但是对象是在jvm中是如何被访问到的,大家有没有考虑过这个问题,底层到底是咋样运行的?? 这个地方其实《深入理解java虚拟机》中第二章2.3.3介绍的很清楚,我先摘抄一段: 建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的 具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向...原创 2019-12-03 19:11:29 · 146 阅读 · 0 评论 -
java对象的内存布局
实际编写java代码的时候,我们需要对象,就用一个关键字new就可以实现了,大家就可以开心的去使用我们的对象了,但是如果要让工资更高一点,这样肯定是不行的,我们必须知道一个对象在jvm的堆内存里面到底包含了那些东西。话不多说,直接开始: 这个就是在jvm的堆内存中,对象的内容。 ...原创 2019-12-03 18:29:40 · 87 阅读 · 0 评论 -
jvm的栈上分配
这里有个问题,大家根据之前的经验,new出来的对象都是存放在堆里面,但是new出来的对象可以存放到别的地方吗? 答案是肯定的,new出来的对象不仅可以放到堆里,jdk1.6.25之后,jdk提供了栈上分配,就是说new出来的对象也可以存放到栈上。 但是这个是否存放到栈上是有前提的,我们都知道方法在执行的时候会产生一个栈帧,那么这个方法里面new了一个对象,在别的地方没哟使用,那么这个对象就会存放到...原创 2019-12-03 17:51:44 · 359 阅读 · 0 评论 -
jvm中对象的创建过程
我们在平时的开发中写java代码的时候,如果需要一个对象,利用java关键字new就可以创建好我们需要的对象。但是各位,你们知道就是这个一个简单的new,jvm里面到底经历了多少风风雨雨吗?好的,废话不多,直接开始!(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一 个类的符号引用,并且检查这个...原创 2019-12-03 17:28:39 · 157 阅读 · 0 评论 -
jvm的内存模型分析
废话不说,直接上图,说明一切,然后我一个个的去分析。 java虚拟机栈 java中的每个方法在执行的时候都会产生一个栈帧,栈帧里面存放的就是局部变量表,操作数栈,动态链接,方法出去。话不多说,直接上图: 一个方法从调用到执行完成,就是一个栈帧从入栈到出栈的过程。 java方法区 方法区在jdk1.8之后,叫做元区间,存放的地方就是物理内存了。 存放的是类的信息(class信息),常量(运行时常...原创 2019-12-03 16:29:55 · 73 阅读 · 0 评论