JVM
文章平均质量分 94
旧时明月丶
这个作者很懒,什么都没留下…
展开
-
从JVM层面来研究字符串
字符串String是日常Java开发中使用最多的数据类型之一,今天我将从JVM层面来分析一下字符串的原理先简单解释一下什么是字符串:在Java中String表示字符串,使用一对""来表示,它有如下特点:String类被声明为final类型,说明String不可被继承String实现了Serializable和Comparable接口,表示字符串支持序列化,并且可以比较大小的String在JDK8及以前内部定义了final char[] value用于存储字符串数据,JDK9改为byte[],说明原创 2021-01-01 17:38:28 · 246 阅读 · 0 评论 -
Java中锁的四种状态以及锁升级过程
在Java(1.6+)中锁的状态一共有四种,级别由低到高分别是:无锁、偏向锁、轻量级锁、重量级锁,这几个状态会随着竞争情况逐渐升级,其中锁可以升级,但是不能降级。Java中加锁的最简单方式就是加synchronized关键字,那么为什么锁会有这么多状态的锁呢?在Java早期,synchronized叫做重量级锁,加锁过程需要操作系统在内核态访问核心资源,因此操作系统会在用户态与内核态之间切换,效率很低下。于是JDK1.6之后,JVM为了提高锁的获取与释放效率,对synchronized进行了优化,引入了偏原创 2020-11-11 23:11:10 · 2472 阅读 · 0 评论 -
Java对象的内存布局
开始先抛出一个问题:一个对象o,Object o = new Object();创建完成后会占用多少字节的内存?要能回答这个问题,就需要了解java对象的内存布局。对象内存布局一个Java对象在内存中包括对象头、实例数据和对齐填充三个部分。如下图所示:对象头Mark Word:包含一系列的标记位比如hashcode、GC分代年龄、偏向锁位,锁标志位等。这个Mark Word在对象被加了不同量级的锁时所包含的内容和布局都有所不同,这涉及到锁升级的知识,暂不展开讨论Klass Pointer:是一原创 2020-11-04 21:58:49 · 445 阅读 · 3 评论 -
java类中静态变量是如何被赋值的
我们知道java中类加载的过程分为:加载、连接、初始化,其中连接阶段又分为验证、准备和解析,准备阶段的动作就是为类的静态变量分配内存,并将其设置为一个默认值,java中各种数据类型的默认值如下:数据类型默认值byte0short0int0long0float0.0double0.0char(空)booleanfalse...原创 2019-09-08 11:41:34 · 14964 阅读 · 7 评论