什么是JVM:(jvm有跨平台性)
java代码-->(翻译)class(字节码文件)-->机器上运行
JVM 代码--->==类加载器--->运行是数据区(内存)--->执行引擎==--->机器识别码
image内存管理是JVM的"五章六腑" : 包含-> 内存管理和垃圾回收
运行时数据区
线程私有(指令):程序计数器 , 本地方法栈 , 虚拟机栈(java栈)
image线程共享(数据): 堆(对象) , 方法区(静态变量和常量)
程序计数器
指向当前线程正在执行的字节码(class)指令的地址(行号)
为什么需要程序计数器(每一个线程都有一个程序计数器,栈(虚拟机栈,本地方法栈))
- java 天生就是多线程的,意味着线程需要切换
- 确保多线程情况下的程序正常执行
栈(STack): 数据结构--->java方法的执行是吻合的
入口和出口只有一个
入栈
出栈
特点:
先进后出(FILO)
为什么jvm要使用栈:
虚拟机栈:(大小可以用 -Xss128k 设置)
==java的class文件进行反编译(javap -v .\javaStack.class > a.txt)的文件==
(javap指令 -v 执行 .\javaStack.class所执行的文件地址)
Java字节码指令大全
存储当前线程运行方法所需的数据, 指令. 返回地址
虚拟机栈有: ==栈帧== (类中每一个方法对应一个栈帧)
------主要有------
反编译文件里对应的局部变量表 image局部变量表(是32位的地址(2^32寻址范围):八大基本数据类型(64位,高低位进行))
(如果是对象)对象的引用的地址
image操作数栈
image动态链接(多态)
image image返回地址
网友评论