![](https://img-blog.csdnimg.cn/20200630143036715.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
【JVM】
HotSpot VM
尚硅谷课程笔记及部分个人理解
Mr-Wanter
多看,多想。天底下最无本买卖的事情,就是从别人身上学一个好字。
展开
-
StringTable
1、String的不可变性 jdk1.8 String类的底层是char型数组实现的 +jdk1.9 String类底层改为byte型数组实现 因为大部分string字符串都是字母,占一个字节,使用char型数组会导致空间浪费。1.9对于中文底层会对byte数组传入编码类型,使其兼容中文 String类是final的,不可以被继承 String的存储是不可变的,无论是拼接字符或替换字符等操作,都是在堆空间的常量池里新开辟空间存放;但常量池不会存储相同内容的字符串 class Memory { p原创 2020-08-03 17:20:13 · 109 阅读 · 0 评论 -
执行引擎
解释器:加载快,执行慢 JIT编译器:对热点代码深度优化(编译后缓存在方法区),加载慢,执行快 缺省情况下HotSpot VM是采用解释器与即时编译器并存的架构,当然开发人员可以根据具体的应用场景,通过命令显式地为Java虚拟机指定在运行时到底是完全采用解释器执行,还是完全采用即时编译器执行。如下所示: ➢-Xint: 完全采用解释器模式执行程序; ➢-Xcomp: 完全采用即时编译器模式执行程序。如果即时编译出现问题,解释器会介入执行。 ➢-Xmixed: 采用解释器+即时编译器的混合模式共同执行程序。原创 2020-08-03 17:06:23 · 163 阅读 · 0 评论 -
对象实例化内存布局与访问定位
目录1、对象实例化的几种方式2、对象实例化过程3、对象的内存布局 1、对象实例化的几种方式 美团: 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服: 二面: java对象头里有什么 2、对象实例化过程 ①加载类元信息 ②为对象分配内存 ③处理并发问题 ④属性的默认初始化(零值初始化) ⑤设置对象头的信息 ⑥属性的显式初始化、代码块中初始化、构造器中初始化 3、对象的内存布局 ...原创 2020-08-03 16:56:21 · 182 阅读 · 0 评论 -
方法区
目录1、堆、栈、方法区的交互关系2、方法区基本概述3、方法区大小设置4、方法区内部结构5、non-final的类变量6、方法区的演进过程7、方法区垃圾回收 1、堆、栈、方法区的交互关系 2、方法区基本概述 方法区(Method Area) 与Java堆一样,是各个线程共享的内存区域。 方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的。 方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展。 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导原创 2020-08-03 16:52:56 · 603 阅读 · 0 评论 -
运行时数据区
目录1、pc寄存器(程序计数器)2、栈栈的内部结构局部变量表操作数栈动态链接方法的调用方法返回地址一些附加信息3、本地方法接口4、本地方法栈5、堆概述堆空间内部结构设置堆内存大小与OOM新生代与老年代参数设置对象分配过程Minor GC、Major GC、Full GC内存分配策略TLAB堆空间常用参数逃逸分析 1、pc寄存器(程序计数器) pc寄存器存储的是下一条需要执行的指令地址。执行引擎取出pc寄存器的指令地址,找到对应指令去执行。它是线程私有的。 pc寄存器的作用: cpu执行多线程是并行执行(原创 2020-06-30 16:19:50 · 134 阅读 · 0 评论 -
类加载子系统
目录1、类加载器加载链接初始化2、双亲委派机制 1、类加载器 类加载三个环节:加载、链接、初始化 加载 1.通过一个类的全限定名获取定义此类的二进制字节流 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3.在内存中生成一个代表这个类的java. lang.Class对象,作为方法区这个类的各种数据的访问入口 引导类加载器(bootstrapClassloader):加载java、javax、sun包下的类,由C和C++编写 扩展类加载器(ExtClassloader):加载JDK下 j原创 2020-06-30 15:07:55 · 104 阅读 · 0 评论 -
JVM与JAVA体系结构
目录1、JVM是什么2、JDK&JRE&JVM3、JVM结构4、java代码执行流程5、JVM架构模型6、JVM生命周期7、有影响力的虚拟机 1、JVM是什么 JVM跨语言平台,只关心字节码文件是否符合jvm标准规范。是一个二进制字节码的运行环境。目前流行的jvm虚拟机为HotSpot VM。 [跨语言] 任何语言通过编译生成字节码文件,只要满足jvm标准规范就可以在jvm虚拟机上解释运行 https://docs.oracle.com/javase/specs/index.html原创 2020-06-30 14:40:39 · 190 阅读 · 0 评论