![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 90
那股哇
这个作者很懒,什么都没留下…
展开
-
StringTable
文章目录一、String的基本特性不可变性一道面试题二、String的内存分配三、String的基本操作四、字符串拼接操作五、intern()的使用两种创建对象方式JDK6与JDK7/8对比一、String的基本特性String声明为final,不可被继承实现了Serializable接口,支持序列化;实现了Comparable接口,字符串可以比较大小在Java8及以前使用char[]存储字符串,在Java9后改用byte[],数组创建后大小不可变不可变性字符串重现赋值时,需要重新指定原创 2021-03-18 16:26:42 · 167 阅读 · 1 评论 -
对象实例化、内存布局、访问定位
文章目录对象实例化对象的内存布局对象访问定位对象实例化加载类元信息 虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果找到,则进行类加载,并生成对应的C原创 2021-03-15 16:08:54 · 144 阅读 · 0 评论 -
运行时数据区(方法区)
文章目录栈、堆、方法区的交互关系方法区概述HotSpot中方法区的演进设置方法区大小与OOM方法区的内部结构类型信息域(Field)信息方法信息non-final的类变量栈、堆、方法区的交互关系方法区概述方法区看作一块独立于Java堆的内存空间,是各个线程共享的内存区域方法区在Java虚拟机启动时被创建,其实际的物理内存空间和Java堆一样,可以是不连续的,方法区的大小可以是固定大小或者是可扩展空间,关闭JVM会释放这个区域的内存方法区的大小决定了系统可以保存多少个类,如果系统定义了太多类,原创 2021-03-12 21:01:56 · 218 阅读 · 0 评论 -
运行时数据区(堆)
概述一个JVM实例只存在一个堆内存Java堆在JVM启动时即被创建,其空间大小也确定了堆可以处在物理上不连续的空间中,但是在逻辑上应该被视为连续的在方法结束后,堆中的对象不会被马上移除,仅仅在垃圾收集的时候才会被移除-Xms用于表示堆区的起始内存,等价于-XX:InitialHeapSize-Xmx用于表示堆区的最大内存,等价于-XX:MaxHeapSize通常会将-Xms和-Xmx两个参数配置相同的值,其目的是为了避免频繁的扩容与垃圾回收,从而提高性能堆空间参数设置:https://do原创 2021-03-09 18:39:51 · 191 阅读 · 0 评论 -
运行时数据区(PC寄存器、虚拟机栈、本地方法栈)
运行时数据区在运行时数据区中,红色部分是由所有线程共享的数据区灰色部分是线程隔离的数据区程序计数器PC寄存器是一块较小的内存区域,可以看作当前线程所执行的字节码指令的行号指示器作用:PC寄存器用来存储指向下一条指令的地址,由执行引擎读取下一条指令每个线程都有自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致任何时间一个线程都只有一个方法在执行,就是当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;如果是在执行native方法,则是未原创 2021-03-06 21:58:40 · 171 阅读 · 0 评论 -
虚拟机类加载机制
类加载的时机类的生命周期有七个阶段其中,加载、验证、准备、初始化和卸载这五个阶段顺序是确定的,而解析阶段在某些情况下可以在初始化阶段之后进行主动引用:在初始化阶段,《Java虚拟机规范》严格规定了六种情况必须立即对类进行初始化遇到new、getstatic、putstatic、invokestatic四条字节码指令,类若果未进行过初始化,需要先进行初始化。能够生成这四条指令的典型场景: 使用new关键字实例化对象 读取或设置一个类型的静态字段时(被final修饰、已在编译器把结原创 2021-03-01 23:00:37 · 96 阅读 · 0 评论 -
JVM系列笔记--字节码与类加载
一、字节码指令反编译可使用javap -v className.class来反编译class文件public class Demo3_1 { public static void main(String[] args) { int a = 10; int b = Short.MAX_VALUE + 1; int c = a + b; System.out.println(c); }}Classfile /D:/dow原创 2020-11-10 16:24:03 · 176 阅读 · 0 评论 -
JVM系列笔记--垃圾回收
对象回收引用计数法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的public class ReferenceCoutingGC { public Object instance = null; private static final int _1MB = 1024*1024; private byte[] bigSize = new byte[2 * _1MB]; p原创 2020-11-05 17:07:05 · 158 阅读 · 0 评论 -
JVM系列笔记--内存结构
运行时的数据区域程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,是当前线程所执行的字节码的行号指示器,作用是用来选取下一条需要执行的字节码指令各条线程之间计数器互不影响,独立存储,线程私有的内存区域如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空此区域不会有内存溢出(OutOfMemoryError)虚拟机栈每一个方法被调用直至执行完毕的原创 2020-11-03 23:36:05 · 84 阅读 · 0 评论