虚拟机运行时数据区

1、虚拟机运行时数据区

抽象概念,内部实现依赖寄存器、主内存、高速缓存

计算器=指令+数据

指令相关:虚拟机栈、本地方法栈、程序计数器

数据相关:堆、方法区

2、线程私有区域(程序计数器、本地方法栈、虚拟机栈)

线程私有;随线程的启动而产生,线程的结束而消亡

程序计数器

是java虚拟机规范里面, 唯一 一个 没有规定任何 OutOfMemoryError 情况的区域

记录当前线程执行的字节码的行号指示器,各线程之间相互独立、互不影响。

作用:记录线程执行的字节码行号,线程切换时,线程能正常执行

本地方法栈

存放native方法

虚拟机栈

栈:一种数据结构,先进后出,和Java中调用方法的特性一致

设置栈大小:-Xss

查看字节码指令:1、javac xx.java文件转化为xx.class文件  2、javap -v xx.class > 1.txt  反编译class文件保存到txt文件中 3、查看txt文件中的字节码指令

虚拟机栈是线程私有的,线程执行时,每个方法对应一个栈帧,栈帧中存储了局部变量表、操作数栈、返回地址、动态连接、....,Java中方法的执行就是对应着栈帧在虚拟机栈中入栈和出栈过程

局部变量表:存储基本数据类型、局部的对象存储引用地址

操作数栈:存放方法执行的操作数,也是一个栈,可以操作任意数据类型,方法的执行就是操作这些数据入栈和出栈

动态连接:多态,存放类加载、运行时才能确定的方法

返回地址:正常返回,程序计数器中的地址作为返回,异常,异常处理器表确定

虚拟机运行时数据区_第1张图片

3、数据共享区域

几乎所有对象都存储在该区域,也是垃圾回收的主要区域

参数调整:

-Xms:堆的最小值

-Xmx:堆的最大值

-Xmn:新生代的大小

-XX:NewSize  新生代最小值

-XX:MaxNewSIze 新生代最大值

方法区

静态变量、常量、类信息、即时编译期编译后的代码

4、虚拟机中对象的初始化

检查加载-内存分配(指针碰撞、空闲列表、并发安全、CAS机制)-内存空间初始化-设置-对象初始化

5、对象的访问定位

句柄

直接指针

6、逃逸分析

虚拟机提供的优化技术,对于线程私有的对象分配在栈上,而不分配在堆上。跟随着方法的调用创建或者销毁,不需要垃圾回收,提升性能。

逃逸分析的目的是判断对象的作用域是否会逃逸出方法体,不会逃出方法体时,将对象存储在栈中,提升性能。

-server JVM运行的模式之一, server模式才能进行逃逸分析,JVM运行的模式还有mix/client

-Xmx10m和-Xms10m:堆的大小

-XX:+DoEscapeAnalysis:启用逃逸分析(默认打开)

-XX:+PrintGC:打印GC日志

-XX:+EliminateAllocations:标量替换(默认打开)

-XX:-UseTLAB关闭本地线程分配缓冲

你可能感兴趣的:(虚拟机运行时数据区)