JVM
文章平均质量分 65
一个头一个大
这个作者很懒,什么都没留下…
展开
-
JAVA的引用类型
在Java程序中,最常见的引用类型是强引用(普通系统99%以上都是强引用),也就是我们最常见的普通对象引用,也是默认的引用类型。相对的,软引用、弱引用和虚引用的对象是软可触及、弱可触及和虚可触及的,在一定条件下,都是可以被回收的。所以,强引用是造成Java内存泄漏的主要原因之一强引用具备以下特点:强引用可以直接访问目标对象。强引用所指向的对象在任何时候都不会被系统回收,虚拟机宁愿抛出OOM异常,也不会回收强引用所指向对象。强引用可能导致内存泄漏软引用是用来描述一些还有用,但非必需的对象。只被软引用关联着的对原创 2022-06-24 16:05:36 · 71 阅读 · 0 评论 -
STW和safe point
STWstop-the-world,简称STw,指的是GC事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW。可达性分析算法中枚举根节点(GC Roots)会导致所有Java执行线程停顿。被STW中断的应用程序线程会在完成GC之后恢复,频繁中断会让用户感觉像是网速不快造成电影卡带一样,所以我们需要减少STw的发生。STW事件和采用哪款GC无关,所有的GC都有这个事件。安全点与安全区域安全点程序执行时并非在所有地方都能停顿下来开始GC原创 2022-06-23 21:46:29 · 288 阅读 · 0 评论 -
JVM类加载之初始化
类加载的定义: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流)一个类型被加载到内存使用 到 结束卸载出内存,它的生命周期分为7个阶段: 加载->验证->准备->解析->初始化->使用->卸载其中重要阶段一般的开始顺序: 加载->验证->准备->解析->初始化验证,准备,解析合起来又称为链接所以也可以是加载->链接->初始化注意这里的顺序是一般的开始原创 2022-06-23 17:54:27 · 295 阅读 · 0 评论 -
JVM类加载之解析
类加载的定义: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流)一个类型被加载到内存使用 到 结束卸载出内存,它的生命周期分为7个阶段: 加载->验证->准备->解析->初始化->使用->卸载其中重要阶段一般的开始顺序: 加载->验证->准备->解析->初始化验证,准备,解析合起来又称为链接所以也可以是加载->链接->初始化注意这里的顺序是一般的开始原创 2022-06-23 17:51:37 · 256 阅读 · 0 评论 -
JVM类加载之准备
类加载的定义: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流)一个类型被加载到内存使用 到 结束卸载出内存,它的生命周期分为7个阶段: 加载->验证->准备->解析->初始化->使用->卸载其中重要阶段一般的开始顺序: 加载->验证->准备->解析->初始化验证,准备,解析合起来又称为链接所以也可以是加载->链接->初始化注意这里的顺序是一般的开始原创 2022-06-23 17:44:13 · 172 阅读 · 0 评论 -
JVM类加载之验证
类加载的定义: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流)一个类型被加载到内存使用 到 结束卸载出内存,它的生命周期分为7个阶段: 加载->验证->准备->解析->初始化->使用->卸载其中重要阶段一般的开始顺序: 加载->验证->准备->解析->初始化验证,准备,解析合起来又称为链接所以也可以是加载->链接->初始化注意这里的顺序是一般的开始原创 2022-06-23 17:41:23 · 416 阅读 · 0 评论 -
JVM的类加载之加载
类加载的定义: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流)一个类型被加载到内存使用 到 结束卸载出内存,它的生命周期分为7个阶段: 加载->验证->准备->解析->初始化->使用->卸载其中重要阶段一般的开始顺序: 加载->验证->准备->解析->初始化验证,准备,解析合起来又称为链接所以也可以是加载->链接->初始化注意这里的顺序是一般的开始原创 2022-06-23 17:35:50 · 62 阅读 · 0 评论 -
new String()创建几个对象?
下面代码中创建了几个对象?答案众说纷纭,有说创建了1个对象,也有说创建了2个对象。答案对,也不对,关键是要学到问题底层的原理。String的两种初始化形式是有本质区别的。当直接赋值时,字符串“abc”会被存储在常量池中,只有1份,此时的赋值操作等于是创建0个或1个对象。如果常量池中已经存在了“abc”,那么不会再创建对象,直接将引用赋值给str1;如果常量池中没有“abc”,那么创建一个对象,并将引用赋值给str1。那么,通过new String(“abc”);的形式又是如何呢?答案是1个或2个。当JV原创 2022-06-11 16:25:27 · 1147 阅读 · 0 评论 -
String.intern()的用法
String.intern()官方给的定义:When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the原创 2022-06-11 16:16:18 · 303 阅读 · 0 评论