JVM
文章平均质量分 96
九州殊口二
这个作者很懒,什么都没留下…
展开
-
彻底弄懂JVM常量池
文章目录一、绪论Class文件常量池字符串常量池为什么产生字符串常量池与字符串驻留String.intern()字符串常量池位置字符串常量池内存储的是什么运行时常量池class文件常量池和运行时常量池 一、绪论 注:本文提到的JVM都是HotSpot Class文件常量池 Java源代码经过编译后生成.class文件。.class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池,用于存放编译器生成的各种字面量(Literal)和符号引用(Symbolic References)。原创 2021-02-14 20:37:19 · 388 阅读 · 0 评论 -
java各个变量都存储在哪了?
静态变量:位于方法区。 实例变量:作为对象的一部分,保存在堆中。 临时变量:保存于栈中,栈随线程的创建而被分配。 栈内存中存放局部变量(基本数据类型和对象引用),而堆内存用于存放对象(实体) 对于字符串而言,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中;如果是运行期(new出来的)才能确定的就存储在堆中。 对于equals相等的字符串,在常量池中永远只有一份,在堆中可以有多份。 ...转载 2020-03-21 19:52:53 · 9374 阅读 · 4 评论 -
双亲委派模型
文章目录类加载器类加载器与类的唯一性类加载器种类双亲委派模型双亲委派双亲委派模型为什么要使用双亲委派模型破坏双亲委派 类加载器 类的加载阶段,虚拟机完成三步工作: 通过类名获取此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类Class对象,作为方法区这些数据的访问入口 一句话来说,类的加载就是读取二进制字节流以生成Class对象。 但是虚拟...原创 2020-03-19 12:13:25 · 211 阅读 · 0 评论 -
JVM 类加载机制
文章目录1.类加载过程1.1.加载1.2.验证1.3.准备1.4.解析1.5.初始化1.6.使用1.7.卸载2.实战参考 1.类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 在开始聊之前,先给大家...原创 2020-03-14 18:30:06 · 243 阅读 · 0 评论 -
JVM垃圾回收
文章目录写在前面本节常见面试题本文导火索1.揭开 JVM 内存分配与回收的神秘面纱1.1 对象优先在 eden 区分配1.2 大对象直接进入老年代 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡(两种方法)。 简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。 如何判断一个常量是废弃常量 如何判断一个类是无用的类 垃圾收...原创 2020-03-14 13:52:23 · 371 阅读 · 0 评论 -
内存溢出异常(OOM)
文章目录Java堆溢出 Java堆溢出 Java堆用于存储对象实例,只要不断创建对象,并且保证GC Roots到对象之间有可达路径(对象被引用)来避免垃圾回收机制清除对象,那么在对象数量达到最大堆容量后就会产生内存溢出异常。 举个栗子: ...原创 2019-11-12 13:43:45 · 564 阅读 · 0 评论 -
HotSpot虚拟机
文章目录目标1.对象的创建2.对象的内存布局3.对象的访问定位参考资料 目标 探讨HotSpot虚拟机在Java堆中对象分布、布局和访问的全过程。 1.对象的创建 虚拟机遇到一条new指令时,先去检查这个指令的参数能否在常量池中定位到一个类的符号引用(有没有属性相同的类),并且检查这个符号引用代表的类是否被加载、解析、初始化过。如果没有,那必须先执行相应的类加载过程。(关于类加载过程后面再探讨)...原创 2019-11-04 21:16:50 · 188 阅读 · 0 评论 -
Java虚拟机的内存结构
文章目录1.Java虚拟机的内存结构1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区 1.Java虚拟机的内存结构 Java虚拟机的内存结构,在《Java 虚拟机规范》中叫“运行时数据区” 根据《Java 虚拟机规范》中的说法,Java 虚拟机的内存结构可以分为公有和私有两部分。公有指的是所有线程都共享的部分,指的是 堆、方法区、常量池。私有指的是每个线程的私有数据,包括:...原创 2019-11-04 10:21:18 · 314 阅读 · 0 评论 -
一. Javac:从源代码到字节码
1. 什么是JavaC JavaC是一种编译器,将Java源代码编译成JVM能够识别的一种语言,JVM再把这种语言转变成机器能够识别的语言。从表面上看就是将.java文件编译成.class文件。.class文件中是一连串的 16 进制二进制流。 2.JavaC编译器的基本结构 词法分析:识别关键词 语法分析:检查关键词组合在一起是不是符合语法规范 语义分析:将复杂的语法转换为简单的语法,如将fo...原创 2019-10-31 16:01:00 · 862 阅读 · 0 评论