![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
IT圈最后的深情
00
展开
-
jvm调优之Arthas(阿里巴巴开源的Java诊断工具)安装教程及常用的基本命令演示
Arthas介绍:Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用tab键对各种信息的自动补全,诊断起来非常利索。官网:https://alibaba.github.io/arthas/index.htmlhttps://alibaba.github.io/arthas/index.htmlGithub地址:..原创 2022-03-29 02:32:09 · 1895 阅读 · 0 评论 -
JVM中对象如何在堆内存分配?
JVM中对象如何在堆内存分配?1、指针碰撞(Bump The Pointer) :内存规整的情况下;2、空闲列表(Free List) :内存不规整的情况下; 选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有空间压缩整理(Compact)的能力决定;因此,当使用Serial、ParNew等带压缩整理过程的收集器时,系统采用的分配算法是指针碰撞,既简单又高效;而当使用CMS这种基于清除(Sweep)算法的收集器时,理论上就只能采用较为复杂的空闲列表来分配内存原创 2022-03-29 02:02:28 · 421 阅读 · 0 评论 -
JVM老年代空间分配担保机制---及什么情况会进入老年代
新生代Minor GC后剩余存活对象太多,无法放入Survivor区中,此时就必须将这些存活对象直接转移到老年代去,如果此时老年代空间也不够怎么办?1、执行任何一次Minor GC之前,JVM会先检查一下老年代可用内存空间,是否大于新生代所有对象的总大小,因为在极端情况下,可能新生代Minor GC之后,新生代所有对象都需要存活,那就会造成新生代所有对象全部要进入老年代;2、如果老年代的可用内存大于新生代所有对象总大小,此时就可以放心大胆的对新生代发起一次Minor GC,因为 Min...原创 2022-03-29 01:56:13 · 1575 阅读 · 0 评论 -
JVM对象动态年龄判断是怎么回事?
虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold=15才能晋升老年代;结论-->动态年龄判断: Survivor区的对象年龄从小到大进行累加,当累加到X年龄(某个年龄)时占用空间的总和大于50%(可以使用-XX:TargetSurvivorRatio=?来设置保留多少空闲空间,默认值是50),那么比×年龄大的对象都会晋升到老年代;...原创 2022-03-29 01:47:53 · 398 阅读 · 0 评论 -
堆中对象的布局以及如何判断对象可以回收
原创 2022-03-29 01:44:16 · 259 阅读 · 0 评论 -
JVM运行时数据区中栈、堆,程序计数器、元空间,的特点及作用
jvm内存结构划分2.jvm运行时数据区 程序计数器的特点及作用:1.程序计数器是一块较小的内存空间,几乎可以忽略;2.是当前线程所执行的字节码的行号指示器;3.Java多线程执行时,每条线程都会有一个独立的程序计数器,各条线程之间互不影响;4.该区域是“线程私有”的内存,每个线程独立存储;5.该区域不存在OOM;6.无GC回收3.jvm运行时数据区 虚拟机栈的特点及作用:1.线程私有2.方法执行会创建栈帧,存储局部变量表等信息;3.方法执行遵原创 2022-03-29 01:37:19 · 1744 阅读 · 0 评论 -
图解jvm双亲委派模型,以及它存在的原因和好处
双亲委派模型的工作过程:如果·一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是会把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当上一层类加载器反馈自己无法完成这个请求(他的搜索范围没有找到这个类)时,下一层类加载器才会尝试自己去加载;jdk为什么要设计双亲委派模型,有什么好处?1.确保安全,避免核心类库被修改2.避免重复加载;3.保证类的唯一性;如果你写一个jaa.lang.S...原创 2022-03-27 23:29:53 · 784 阅读 · 0 评论 -
jvm中三种类加载器
1.Bootstrap Class Loader(启动类加载器)也叫根的类加载器----c++实现加载jre/lib/rt.jar, resource.jar、charst.jar 被-Xbootclasspath参数所指定的路径中存放的类库2.Extension ClassLoader(扩展类加载器)---java实现加载jre\lib\ext, 被Java.ext.dirs系统变量所指定的路径中所有的类库3.Application ClassLoader(应用程序类加载器)---Java原创 2022-03-27 22:56:27 · 1307 阅读 · 0 评论 -
JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。
为什么分年老代和新生代1)新生代(Young Gen):年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁。年轻代分成1个Eden Space和2个Suvivor Space(from 和to)。2)老年代(Tenured Gen):年老代主要存放JVM认为生命周期比较长的对象(经过几次的Young Gen的垃圾回收后仍然存在),内存大小相对会比较大,垃圾回收也相对没有那么频繁。为什么要分为Eden和Survivor?为什么要设置两个Survivor区?1.如果没有Surviv.原创 2022-03-20 15:43:10 · 1048 阅读 · 0 评论