java设计者将内存划分为不同的区域,每一块区域都有它自已的职责,粗略的分工如下:堆区是专门用来存储对象的,方法区是专门用来保存类的结构信息的,虚拟机栈是专门用来执行java方法的,本地方法栈是专门用来执行native方法的,程序计数器是专用记录线程执行字节码所执行的行号记录的。java内存区域统称 ...
分类:
其他好文 时间:
2020-04-20 09:16:07
阅读次数:
61
Java程序在运行时,首先要读取编译后的class文件,由于我们在编写源码时会定义和使用各种结构和对象,那么在进行加载时,JVM会将分配得到的内存划分为多个区域。由JVM创建的不同区域,有些会随着虚拟机启动而创建,随着虚拟机退出而销毁,如:方法区(Method)、Java堆。还有一些是与线程一一对应的,会随着线程开始和结束而被创建和销毁,如:PC寄存器、Java虚拟机栈、本地方法栈。
分类:
其他好文 时间:
2020-04-15 23:01:12
阅读次数:
86
1、引用计数法 如果某个地方引用了这个对象就+1,如果失效了就-1,当为0就会回收但是JVM没有用这种方式,因为无法判定相互循环引用(A引用B,B引用A)的情况 2、引用链法(可达性分析) 通过一种GC ROOT的对象(虚拟机栈(栈帧中的本地变量表)中引用的对象、方法区中类静态属性引用的对象、方法区 ...
分类:
其他好文 时间:
2020-04-12 23:07:09
阅读次数:
169
运行时数据区域 java虚拟机在执行java程序过程中会把他所管理的内存划分为若干个不同的数据区域。 java虚拟机运行时数据区 方法区(线程共享区),虚拟机栈,本地方法栈,堆(线程共享区),程序计数器 1.程序计数器 程序计数器是一块较小的内存空间,他可以看作当前线程所执行的字节码指示器。每条线程 ...
分类:
编程语言 时间:
2020-04-09 14:11:41
阅读次数:
81
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法 ...
分类:
编程语言 时间:
2020-04-08 12:10:18
阅读次数:
75
运行时数据区域 1. 程序计数器 行号指示器,线程私有,本地方法计数器值为null。 2. java虚拟机栈 存储局部变量、方法等信息。每一个方法被调用至执行完毕的过程就对于着一个栈帧从入栈到出栈的过程,进入一个方法时,这个方法需要在栈帧中分配多少空间是完全确定的,运行期间不会改变。栈是线程私有的。 ...
分类:
其他好文 时间:
2020-04-06 15:48:06
阅读次数:
63
我们都知道java虚拟机所管理的内存区域包括方法区,堆,虚拟机栈,本地方法栈,程序计数器。 在《深入理解java虚拟机》中,周志明老师对虚拟机栈进行了讲解,但是对本地方法栈却一笔带过。今天我们就来对本地方法栈做下深入...... 首先我们先回顾一下虚拟机栈。 1.虚拟机栈 1.1虚拟机栈的特点 虚拟 ...
分类:
其他好文 时间:
2020-04-03 00:22:10
阅读次数:
84
运行时数据区域 包含:程序计数器,java虚拟机栈,本地方法栈,java堆,方法区,运行时常量池。具体相关结构如下图。 区域 是否公用 相关概念 其他描述 程序计数器 线程私有 当前线程执行的字节码行号指示器 如果当前线程执行的java方法,那么计数器 java虚拟机栈 线程私有 java方法执行的 ...
分类:
编程语言 时间:
2020-04-02 17:29:57
阅读次数:
97
虚拟机栈的背景 由于跨平台性的设计,java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 内存中的堆与栈 栈是运行时的单位,而堆是存储的单位1.栈解决程序的运行问题,即程序如何执 ...
分类:
编程语言 时间:
2020-04-01 21:00:34
阅读次数:
103
1.哪些内存需要回收? Java内存运行时区域的各个部分,其中程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不絮执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性。当方法结 ...
分类:
其他好文 时间:
2020-04-01 01:03:42
阅读次数:
77