java 内存结构

一、JVM是Java Virtual Machine(Java虚拟机)的缩写,不同平台上的JVM都是不同的,但向编译器提供相同的接口,编译器面向JVM生成JVM可以理解的.class字节码文件,对应平台的JVM对.class文件进行解释执行生成与该平台对应的机器码,JVM屏蔽了与具体操作系统平台相关的信息,在java跨平台实现中起到转换器的作用。

二、Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域

1、 指令集

。。。。。。。。。。。。

2、 寄存器

用于保存系统状态和处理器所需信息,如指令、计数存储

3、 java栈(JAVA  STACK):编译时由JDK编译器为方法分配

a)Java栈是JVM存储信息的主要方法。当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架(分配内存空间,运行期间不会改变内存大小),以保存该方法的状态信息。栈是线程私有的、存储局部变量表、操作栈、动态链接、方法的状态信息、出口(非方法字节码)

b)【局部变量表:局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用等】

c)在Java 虚拟机规范中,对这个区域规定了两种异常状况:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError 异常;如果虚拟机栈可以动态扩展,当扩展时无法申请到足够的内存时会抛出OutOfMemoryError 异常。

d)Stack的大小限制着线程的数量,通过设置-Xss参数决定Stack大小,过大过小都容易导致stack泄露

4、 堆(heap):运行时由JVM解释器为对象实例分配

a)Java的堆内存是一个运行时数据区,用以保存类的实例,JVM的对内存中存储着正在运行的应用程序所建立的所有对象(数组也分配在此区域),是垃圾回收器GC主要管理的区域,是线程共享的

b)通过设置-Xmx和-Xms 控制堆内存大小。如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。

5、 存储方法域(method area 存储区或方法区):运行时由JVM解释器分配,依赖于具体平台的实现方式。

a)JVM有两类存储区:常量缓冲池和方法区。常量缓冲池用于存储类名称、方法名称和字段名称、静态变量以及串常量。方法区则用于存储Java方法的字节码、即时编译器编译后的代码

b)当此区域无法满足内存分配需求时, 将抛出OutOfMemoryError 异常。

java 内存结构,布布扣,bubuko.com

时间: 2024-12-26 11:31:37

java 内存结构的相关文章

Java内存结构和数据类型

Java内存结构 内存就是暂时对数据的一个存储,他的存储速度非常的快,但是他是暂时的存储,从开机时开始存储,掉电或关机之后数据全部丢失.内存的生命周期就是开机和关机,开机的时候开始计算,关机什么都没有了.优点存储速度快,缺点容易坏掉,如果开机的时候,一点反映都没有,屏幕不亮键盘鼠标不亮,这种情况下一般都是内存条有问题.机器蓝屏,指令错误都是内存引起的. 程序的数据都是存储在内存里面,不存储在硬盘上因为硬盘不安全,可以读取数据.但是内存就不一样,内存他不允许去读取内存数据,并且速度很快所以我们的程

Java内存结构、类的初始化、及对象构造过程

概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下.与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码.数据:程序的执行过程其实依然是代码的执行及数据的读写过程:除了在执行我们写的显式的可见代码外,Jvm还会自动帮我们帮一些事,包括类的加载.初始化.GC等,这些也不特殊.以下分别来说下这些概念. Java内存结构.类的初始化.及对象构造过程

JVM—Java内存结构

JAVA虚拟机内存 JAVA虚拟机内存,也叫JAVA内存,可以理解为Java虚拟机运行时数据区. JVM内存结构 包括: 线程共享的方法区 和 堆, 以及每个线程私有的 JAVA栈,本地方法栈 和 PC计数器(程序计数器). JAVA堆 堆,是JAVA虚拟机中所管理的内存中最大的一块,此内存区域的唯一目的就是存放对象实例以及数组. 所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制. JAVA堆与垃圾回收的渊源 JAVA堆也是垃圾回收器管理的主要区域,因此也被称为

day03 java内存结构以及重载

函数重载(overload)概念: 在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数 类型即可. 函数的特点: 与返回类型无关,只与参数列表有关. 数组概念: 同一种类型数据的集合,其实数组就是一个容器.格式: 元素类型[] 数组名=new 元素类型 内存结构java程序在运行时,需要在内存中的分配空间.为了提高运算效率,有队空间进行了不 同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式. 栈内存:用于存储局部变量,当变量使用完,所占空间自动释放. 堆内存:数

对Java内存结构的一点思考和实践

在一些高并发的程序,或者一些大量使用内存来进行计算的程序,有时候常常会遇到一些这样的问题:程序刚开始运行挺快的,后来就运行缓慢下来了,甚至于到了一定时间还会出现OOM或者StackOverFlow等错误.要理解这些错误产生的根源,就要了解JVM是何如划分.管理.回收内存的,本篇博客将从博主对JVM的认识以及实际经验角度出发,聊聊这些话题. JVM内存结构 一旦涉足JVM内存结构,恐怕会冒出大量的术语:新生代?老生代?永久代?等等,我们暂且抛开这些名称,基于我们的JAVA基础,它应该是什么样子的呢

Java内存结构

一.Java内存分配 1. Java有几种存储区域? 寄存器 --在CPU内部,开发人员不能通过代码来控制寄存器的分配,有编译器来管理. 堆 --在windows下,栈是向底地址扩展的数据结构,是一块连续的内存的区域,即栈顶的地址和栈的最大容量是系统预先定好的. --优点:由系统自动分配,速度较快. --缺点:不够灵活,程序员无法控制. --存放基本数据类型.开发过程中就创建的对象(而不是运行过程中). 栈 --是向高地址扩展的数据结构,是不连续的内存区域. --在堆中,没有堆栈指针,为此也就无

Java虚拟机系列之Java内存结构简介

本文我们将讲解Java虚拟机中各个区域以及各个区域的作用. 一.程序计数器什么是程序计数器,有什么作用?程序技术器是一块比较小的内存区域,主要当做是线程中所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一个执行的字节码命令,分支.循环.跳转等基础功能都是依赖这个程序计数器来完成. 有什么特点?Java虚拟机中的多线程是通过线程轮流切换分配处理器执行时间的方式来实现的,所以为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间计数器互

java内存结构(运行时数据区域)

java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: 其中方法区和堆是由所有线程共享的数据区. Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区. (1).程序计数器: 是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令.程序的分支.循环.跳转.异常处理以及线程恢复等基础功能都是依赖程序计数器来完成. Java虚拟机的多线程是通过线程轮流切换并分配处理器

java内存结构(执行时数据区域)

java虚拟机规范规定的java虚拟机内存事实上就是java虚拟机执行时数据区,其架构例如以下: 当中方法区和堆是由全部线程共享的数据区. Java虚拟机栈.本地方法栈和程序计数器是线程隔离的数据区. (1).程序计数器: 是一块较小的内存空间,其作用能够看作是当前线程所运行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条须要运行的字节码指令. 程序的分支.循环.跳转.异常处理以及线程恢复等基础功能都是依赖程序计数器来完毕. Java虚拟机的多线程是通过线程轮流切换并分