看完GC的回收策略之后,我们再来看一下堆,栈,方法区的交互。 首先我们必须牢记一句话,栈是堆和方法区的引用,学的越多对这句话的理解要越深。 1,这里的堆主要是对局部变量表来说的。 2,栈的内存地址是远远小于堆得,因为在栈中只是对象的引用。 3,gc回收只是回收堆内存,不用考虑栈的内存,因为栈的数据结... ...
分类:
其他好文 时间:
2018-09-22 22:25:46
阅读次数:
209
一,总览 Java Virtual Machine Stacks,线程私有,生命周期与线程相同,描述的是Java方法执行的内存模型:每一个方法执行的同时都会创建一个栈帧(Stack Frame),由于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法的执行就对应着栈帧在虚拟机栈中的入栈,... ...
分类:
其他好文 时间:
2018-09-22 21:57:17
阅读次数:
255
目录 JVM栈之局部变量表:包含参数和局部变量 JVM栈之操作数栈 JVM栈之栈上分配(动态链连接) 目录 JVM栈之局部变量表:包含参数和局部变量 JVM栈之操作数栈 JVM栈之栈上分配(动态链连接) 每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈。Java栈以帧为单位保存线程的运 ...
分类:
其他好文 时间:
2018-09-11 21:28:43
阅读次数:
221
1.执行引擎 所有Java虚拟机的执行引擎都是一致的: 输入的是字节码文件,处理过程就是解析过程,最后输出执行结果。 在整个过程不同的数据在不同的结构中进行处理。 2.栈帧 jvm进行方法调用和方法执行的数据结构,是虚拟机栈的元素。 (图片来自网络) 2.1 局部变量表 存放方法参数和方法内部定义的 ...
分类:
其他好文 时间:
2018-09-09 14:52:41
阅读次数:
176
一、 运行时数据区域 一、 运行时数据区域 1.1 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 1.2 Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一 ...
分类:
编程语言 时间:
2018-09-09 11:54:58
阅读次数:
132
1、运行时数据区域 1.1、程序计数器 线程私有,当前线程所执行的字节码行号指示器, Java虚拟机的多线程是通过线程轮流切换处理器执行时间的方式来分配 1.2、Java虚拟机栈 线程私有,,虚拟机的局部变量表每个方法在执行的时候都会创建栈帧用于存储局部变量,操作数栈,动态链接方法出口等信息,每个方 ...
分类:
编程语言 时间:
2018-09-07 23:56:38
阅读次数:
322
JVM内存划分,人为的根据不同内存空间的存储特点以及存储的数据: 本地方法栈:为虚拟机使用的native方法服务。程序计数器:当前线程所执行的字节码的行号指示器。Java虚拟机栈:描述Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等 ...
分类:
其他好文 时间:
2018-09-04 23:29:05
阅读次数:
193
== :比较java栈局部变量表中变量的地址或值是否相等。 equals : 比较变量的地址在java堆中引用对象是否为同一个对象。 hashcode : 通过对象在JVM内存中的存储地址通过特定算法返回一个hash值,主要是配合HashSet HashMap进行增加、删除等。 public nat ...
分类:
编程语言 时间:
2018-08-26 13:08:01
阅读次数:
121
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法 ...
分类:
编程语言 时间:
2018-08-15 21:36:21
阅读次数:
233
堆(heap):FIFO,所有线程共享的一块内存,是专门存放对象实例的地方,GC发生在这里。随JVM启动而创建 栈(stack):LIFO,应该叫做虚拟机栈,每个线程私有的,存放该线程调用的方法栈帧,存储局部变量表、操作数栈、程序出口、动态链接等,每一个方法的调用就是入栈出栈的过程。 方法区(non ...
分类:
其他好文 时间:
2018-08-14 14:26:19
阅读次数:
206