随笔分类 - JVM
摘要:方法区 栈、堆、方法区的交互关系 从线程共享与否的角度看 从实际情况看 即: 类信息存储在方法区 实例对象信息放在Java堆区 引用放在Java栈区 方法区的理解 《Java虚拟机规范》:尽管在所有的方法区在逻辑上是属于堆的一部分,但是一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。 对于Ho
阅读全文
摘要:堆 知识点 多线程共享一个堆内存,且是最大的内存空间 Java内存管理的核心区域 在JVM启动的时候创建、大小确定(但是可以调节) 《Java虚拟机规范》规定:堆可以处于物理上不连续的内存空间中,当在逻辑上它应该被视为连续的 其实在堆中,存在线程私有的缓冲区 》Thread Local Alloca
阅读全文
摘要:本地方法 一个Native Method就是一个Java调用非Java调用非Java代码的接口。 native Method:该方法的实现由非Java语言实现,这种方法大多数并没有方法体,是由非Java语言在外面实现的 native可以与其它标识符连用,但是abstract除外 为什么使用Nativ
阅读全文
摘要:方法的调用 符号引用转换为直接引用 方法的早期过程 静态链接 早期绑定 当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译器可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接 总结:知道自己要调用什么东西叫作静态链接 动态链接 晚期绑定 被调用的
阅读全文
摘要:动态链接 每一个栈帧当中都包含以个指向运行时常量池重该栈帧所属方法的引用(invokedynamic指令) 在java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用保存在class文件的常量池里; 比如:描述一个方法调用的另外的其它方法时,就是通过常量池中指向该方法的符号引用来表示
阅读全文
摘要:栈顶缓存(Top-of-StackCashing)技术 基于栈式架构得虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然使用更多的入栈和出栈指令,这同时也就意味着将需要更多的指令分派次数和内存读写次数 由于操作数是存储在内存重的,因此频繁地执行内存读/写操作必然影响速度。 综上所述: JVM
阅读全文
摘要:操作数栈 (可以采用数组或者链表来实现) 先15、8进栈,执行+; 23进栈 15出栈 8出栈 知识点 后进后出的操作数栈,可以成为表达式栈 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或者提取数据,即入栈/出栈 如果被调动的方法带有返回值,其返回值会被压入当前栈帧的操作数栈中,并更新
阅读全文
摘要:局部变量表 又称:局部变量数组、本地变量表 定义一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量:基本数据类型、对象引用、以及returnAddress类型 局部变量表建立在线程的栈上,私有数据,不存在数据安全问题 局部变量表所需的容量大小是在编译器确定下来的,并保存在方法的Code属性
阅读全文
摘要:栈 栈与堆 栈是运行时的单位,而堆是存储的单位。 栈:解决程序的运行问题,即程序如何执行,或者说如何处理数据。 堆:解决的是数据存储的问题,即数据怎么放,放在哪儿。 Java虚拟机栈(Java Virtual Machine Stack),早期叫作Java栈。 每个线程在创建时都会创建一个虚拟机栈,
阅读全文
摘要:程序计数器 作用:PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。供执行引擎读取下一条指令。其实就是1、2、3、4、...n的数字。 很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域 每个线程都有自己的程序计数器,私有,生命周期随线程生命周期 任何时间一个线程只有一个方法
阅读全文
摘要:运行时数据区 线程独有 本地方法栈、虚拟机栈、程序计数器 这些与线程对应的数据区会随着线程开始和结束创建和销毁 JVM涉及的线程 线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行 在Hotspot JVM里,每个线程都与操作系统的本地线程直接映射。 当一个Java线程准备好执行以后
阅读全文
摘要:JVM加载细节 JVM堆class文件采用按需加载的方式:当需要使用该类时才会将它的class文件加载到内存生成class对象。 而加载某个类的class文件时采用双亲委派模式,即把请求交由父类处理。 工作原理 说白了:就是从上到下的进行加载,老大bootStrap加载器加载,加载不了,就小弟加载,
阅读全文
摘要:类加载器分类 public class StackStruTest { public static void main(String[] args) { // 对用户自定义个类来说:默认使用系统类加载器进行加载 AppClassLoader ClassLoader classLoader = Sta
阅读全文
摘要:JVM小知识点 Java是栈的指令集架构 利用栈来执行程序指令 简单 不用分配寄存器 指令级小 不用分配寄存器,所以是执行指令不涉及到指令地址 对class文件进行反编译 javap -v 文件名.class 栈指令级:跨平台、指令级小、指令多、执行性能比不上寄存器指令集 JVM的生命周期: 启动(
阅读全文
摘要:Java区别C++ Java内存动态自动分配 Java具有垃圾收集技术 C++的内存对程序员是可见的!这就会很难 JVM位置 执行流程 JVM虚拟机内部结构
阅读全文

浙公网安备 33010602011771号