JVM
文章平均质量分 75
luffylv
这个作者很懒,什么都没留下…
展开
-
如何查看当前虚拟机使用的是哪种收集器
可以通过jmap -heap vmid查看当前虚拟机使用的是哪种收集器,如下图所示:其中VMID为虚拟机进程ID,若查看的是本地虚拟机进程,则VMID和LVMID相同。通过jps -l查看所有虚拟机进程的进程ID,如下图:...原创 2021-04-06 14:22:37 · 377 阅读 · 0 评论 -
JVM启动参数总结
启动参数含义-Xms设置堆内存的最小值-Xmx设置堆内存的最大值-Xmn-Xss设置栈容量-Xoss设置本地方法栈大小-XX:+/-UseTLAB虚拟机是否使用TLAB(本地线程分配缓冲)-XX:SurvivorRatio+XX:CompactFieldstrue/false(默认为true)子类之中较窄的变量是否允许插入父类变量的空隙之中-XX:MaxPermSize-XX:+PrintGCDetails-...原创 2021-03-30 17:53:35 · 119 阅读 · 0 评论 -
JVM 学习总结(五)——垃圾收集算法
从如何判定对象消亡的角度出发,垃圾收集算法可以划分为 “引用计数式垃圾收集”(Reference Counting GC) 和 “追踪式垃圾收集”(Tracing GC) 两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。注: 以下介绍的所有算法均属于追踪式垃圾收集的范畴。一、垃圾收集算法1、分代收集理论分代收集(Generationl Collection)建立在三个分代假说之上:弱分代假说(Weak Generationl Hypothesis):绝大多数对象都是朝生夕灭的。强分原创 2021-03-16 18:03:10 · 118 阅读 · 0 评论 -
JVM 学习总结(三)——对象存活判定算法
垃圾收集器在对堆内存进行回收前,第一件事情就是要确定这些堆中的对象哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。一、判定对象是否存活的两种算法1、引用计数算法引用计数算法(Reference Counting): 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。优点: 引用计数算法(Reference Counting)虽然占用了一些额外的内存空间来进行计数,但它的原理简原创 2021-03-15 17:58:10 · 339 阅读 · 1 评论 -
JVM学习总结(四)——Java中四种引用类型
无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否引用链可达,判断对象是否存活都和“引用”离不开关系。在JDK1.2版之前,Java里面的引用是很传统、狭义的定义:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该reference数据是代表某块内存、某个对象的引用。 在JDK1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Reference) 、软引用(Soft Reference) 、弱引用(Weak Refer原创 2021-03-15 16:11:48 · 111 阅读 · 0 评论 -
JVM学习总结(二)——对象分配、布局和访问
一、对象的创建在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已。虚拟机中,对象的创建过程(仅限于普通Java对象,不包括数组和Class对象等)类加载检查: 当JVM遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。为新生对象分配内存: 在类加载检查通过后,虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,原创 2021-03-09 16:16:00 · 121 阅读 · 0 评论 -
JVM学习总结(一)——运行时数据区域概念
运行时数据区域JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,JVM所管理的内存将会包括以下几个运行时数据区域,如下图。概念一、程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在JVM的概念模型里,字节码解释器原创 2021-03-08 10:24:29 · 91 阅读 · 1 评论