JVM
学习
Ethe'
这个作者很懒,什么都没留下…
展开
-
jvm 内存监控 jvisualvm.exe 使用
双击打开 可查询目前程序的堆栈等信息。原创 2023-09-01 09:36:28 · 149 阅读 · 0 评论 -
JVM有关垃圾回收机制的配置
下方白色区域代表旧生代,蓝色也是代表在旧生代的回收方式,两种蓝色盒子之间的连线表示它们的搭配配置,比如Serial只能和CMS或Serial Old搭配使用,而ParNew只能和CMS或Serial Old使用,而Parallel Scavenge只能和Serail Old和Parallel Old使用,不能和CMS搭配使用。在实践中使用UseConcMarkSweepGC 表示 “ParNew” + “CMS” 的组合是经常使用的,那么这种组合与Java 7最新的G1回收机制相比如何?原创 2023-09-01 09:34:01 · 71 阅读 · 0 评论 -
为什么会有S0,S1
也称为from to原创 2023-09-01 09:30:51 · 46 阅读 · 0 评论 -
虚拟机参数讲解
和java堆一样,方法区时一块所有线程共享的内存区域,它用于保存系统的类信息,方法区(永久区)可以保存多少信息是可以进行配置的,在默认情况下,-XX:MaxPermSize为64MB,系统运行时产生大量的类,就需要设置一个相对合适的方法区,以免出现永久区内存溢出的问题。但是说直接内存一定就可以提高内存访问速度也不见得,具体情况具体分析。-Xmn:可以设置新生代的大小,设置一个比较大的新生代会减少老年代的大小,这个参数对系统的性能以及GC行为有很大的影响,新生代大小一般会设置整个堆空间的1/3到1/4左右。原创 2023-09-01 09:30:08 · 147 阅读 · 0 评论 -
垃圾收集机制和其算法
其核心思想就是将内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存留对象赋值到未被使用的内存块中,之后去清除之前正在使用的内存块中所有对象,反复去交换连个内存的角色,完成垃圾收集。就是分为标记和清除两个阶段进行处理内存中的对象,当然这种方式也是有非常大的弊端,就是空间碎片问题,垃圾回收后的空间不是连续的,不连续的内存空间工作效率要低于连续的内存空间。垃圾回收器的任务是识别和回收垃圾对象进行内存清理,为了让垃圾回收器可以高效的执行,大部分情况下,会要求系统进入一个停顿的状态。原创 2023-08-31 09:42:23 · 42 阅读 · 0 评论 -
对象如何进入到老年代
一般而言对象首次创建会被放置在新生代的eden区,如果没有GC介入,则对象不会离开eden区,那么eden区的对象如何进入老年代呢?一般来讲,只要对象的年龄达到一定的大小,就会制动离开年轻代进入老年代,对象年龄是由对象经历数次GC决定的,在新生代每次GC之后如果对象没有被回收则年龄加1.虚拟机提供一个参数来控制新生代对象的最大年龄,当超过这个年龄范围就会晋升老年代。另外,大对象(新生代eden区无法装入时,也会直接进入老年代)。JVM里有个参数可以设置对象的大小超过指定的大小之后,直接晋升老年代。原创 2023-08-31 09:38:12 · 43 阅读 · 0 评论 -
对象创建流程
TLAB全称是Thread Local Allocation Buffer 即线程本地分配缓存,从名字上看是一个线程专用的内存分配区域,是为了加速对象分配而生的。每一个线程都会产生一个TLAB ,该线程独享的工作区域,Java虚拟机使用这种TLAB区来避免多线程冲突问题,提高了对象分配的效率。-XX:TLABRefillWasterFraction 设置维护进入TLAB空间的单个对象大小,他是一个比例值,默认为64,即如果对象大于整个空间的1/64,则在堆创建对象。-XX:+UseTLAB 使用TLAB。原创 2023-08-31 09:36:08 · 44 阅读 · 0 评论 -
java 堆 栈 方法区
方法区可以理解为永久区(Perm):除了局部变量表和操作数栈以外,栈还需要一些数据来支持常量池的解析,这里帧数据区保存着访问常量池的指针,方便程序访问常量池,另外,当函数返回或者出现异常时,虚拟机必须有一个异常处理表,方便发送异常的时候找到异常代码,因此异常处理表也是帧数据区的一部分。绝大多数情况下,对象首先分配在eden区,在一次新生代回收后,如果对象还存活,则会进入到s0或者s1区,之后每经过一次新生代回收,如果对象存活则他的年龄就加1,当对象达到一定的年龄后,则进入老年代 tenured区。原创 2023-08-31 09:34:57 · 45 阅读 · 0 评论 -
jvm概念画图
方法区则是辅助堆栈的永久区(Perm)解决堆栈信息的产生,是先决条件。栈解决的是运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放在哪儿。User类的实例的使用参数 返回值等 放到栈中。User类的相关信息 放到方法区。User类的实例 放到堆中。原创 2023-08-30 10:25:38 · 53 阅读 · 0 评论 -
JVM概念
也是每个线程私有的空间,java虚拟机会为每个线程创建PC寄存器,在任意时刻,一个java线程总是在执行一个方法,这个方法被称为当前方法,如果当前方法不是本地方法,PC寄存器就会执行当前正在被执行的命令,如果是本地方法,则PC寄存器为undefined,寄存器存放如当前执行环境指针、程序计数器、操作栈指针,计算的变量指针等信息。每个虚拟机线程都有一个私有的栈,一个线程的java栈在线程创建的时候被创建,java栈中保存着局部变量、方法参数、方法调用及返回值等。负责执行虚拟机的字节码。原创 2023-08-30 10:24:09 · 59 阅读 · 0 评论