美文网首页
虚拟机运行时数据区

虚拟机运行时数据区

作者: ycc_123456 | 来源:发表于2019-04-16 22:38 被阅读0次

    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中方法的执行就是对应着栈帧在虚拟机栈中入栈和出栈过程

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

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

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

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

    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关闭本地线程分配缓冲

    相关文章

      网友评论

          本文标题:虚拟机运行时数据区

          本文链接:https://www.haomeiwen.com/subject/sypjwqtx.html