
JVM
文章平均质量分 64
关于java虚拟机运行机制及对象回收
夹克and道格
这个作者很懒,什么都没留下…
展开
-
垃圾收集器常用的几种算法
垃圾收集器常用的三种算法:之前的文章有写到,大部分的垃圾收集器都采用的是分代回收的思想,比如Eden区、S1、S2、老年代等,采用分代收集的思想垃圾器有:Serial、Parallel、ParNew、CMS(老年代)、G1 等。没有采用分代收集理论的收集器有ZGC。以上的收集器会在后面的文章中给大家更新。标记复制算法标记复制算法是将内存分为大小相同的两个区域,每次只使用其中的一块区域,当这一块区域使用完成之后将存活的对象移动到另一块区域,然后再将使用的区域全部清理,每次回收都是对...原创 2022-01-29 07:00:00 · 918 阅读 · 0 评论 -
对象的分配流程,什么是逃逸分析,如何确定对象分配在哪个分代上面
对象分配流程图对象栈上分配我们通过jvm内存分配可以了解到对象都是在堆上分配的,如果对象没有被使用了会由GC进行回收,如果垃圾对象比较多那么会给GC的回收带来较大的压力,间接影响了应用的性能,为了减少临时对象在堆上分配的数量,JVM会通过逃逸分析来确定对象会不会被外部引用,如果不会逃逸则会将对象在栈上分配内存,这样该对象所占用的内存空间会随着栈针的出栈而销毁,减轻了GC回收的压力逃逸分析就是分析对象的作用域当一个对象在方法中被定义后,它可能被外部方法所引用,...原创 2022-01-27 16:54:46 · 429 阅读 · 0 评论 -
什么是指针压缩?如何开启和关闭指针压缩?为什么要进行指针压缩?有哪些注意的地方?
什么是指针压缩呢?从jdk1.6开始在64位的操作系统中就JVM就支持指针压缩。如何开启和关闭指针压缩?jvm配置参数:UseCompressedOops,compressed--压缩、oop(ordinary object pointer)--对象指针。启用指针压缩:-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOops为什么要进行指针压缩?有哪些注意的地方?1.在64位平台的HotSpot中...原创 2022-01-27 15:40:35 · 3131 阅读 · 6 评论 -
对象的创建与内存分配机制
对象的创建主要分为以下几个流程:类加载检查当我们新new一个对象时,首先去检查这个指令的参数是否能在常量池中定位到一个类的引用,并且检查这个引用代表的类是否已经被加载过,如果没有被加载过则执行相应的类加载过程(使用类加载器加载)。内存分配执行完上面的类加载步骤之后,就是为我们新new的对象分配内存,新的对象所需要的内存大小在加载完成之后便可确定,为对象分配空间相当于把一块已知大小的内存从堆中划分给新对象。内存分配如何划分?会不会出现并发问题?划分内存的方式指针碰撞和空闲列表。..原创 2022-01-27 15:27:26 · 229 阅读 · 0 评论 -
JAVA虚拟机及内存模型
首先我们都知道java语言有跨平台特性可以在不同的环境运行java内存模型在young GC过程中对象挪动之后,是怎么做到不影响对象的使用的?对象young GC的时候在堆内部挪动的过程使用的是复制算法,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到新的区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了原创 2022-01-27 11:39:54 · 129 阅读 · 0 评论