Java运行内存区域

  Java的运行数据区域分为:程序计数器、方法区、本地方法栈、虚拟机栈、堆、运行时常量池。

  程序计数器:从字面意思上很容易理解错误(第一眼看见我还以为仅仅是Count计数器),其实它的作用是保存字节码指令,即CPU需要哪种操作,便改变这个程序计数器的值来选取下一条字节码指令,分支、循环、跳转、异常处理等都依赖这个计数器完成。Java是支持并发的,所以每个线程都有自己的一个程序计数器,各个线程的程序计数器互相独立。

  Java虚拟机栈:它描述的是java方法执行的内存模型,每个方法在执行的时候都会创建一个栈帧(Stack Frame)用来存储局部变量表、操作数栈、动态链接等信息。每一个方法从调用到结束的过程实质上就是一个栈帧在虚拟机栈的一个出栈、入栈操作。 其中的局部变量存放看了编译期可知的基本数据类型、对象引用。

  本地方法栈:它的作用和JAVA虚拟机栈的作用类似,不同的是它是为JAVA虚拟机服务的,如java虚拟机需要调用一个Native方法服务,那么这个Native方法运行时的内存模型就存储在本地方法栈中。

  堆:它是JVM所管理的最大一块内存,存放几乎所有的对象实例和数组。是一个所有的线程所共享的内存区域。

  方法区:和堆一样是一个线程共享的内存区域,它的作用是存储已经被加载后的类信息、常量、静态变量、编译后的代码数据等。

  运行时常量池:它是方法区的一部分,是Class信息中的一部分,用于存放编译期生成的各种字面量和符号引用。

  Java在执行操作的时候通过JVM的执行引擎,将程序编译后分别存在在堆和方法区中,然后进入本地库接口当CPU需要执行某一个方法的时候在程序计数器改变字节码加载java虚拟机栈和本地方法栈。(自己的想法)

更详细完整的内容:

http://www.cnblogs.com/dolphin0520/p/3613043.html

  

时间: 2024-12-29 23:03:16

Java运行内存区域的相关文章

Java 内存区域和GC机制

目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢.这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制.概括地说,该机制对 JVM(Java Virtual M

Java内存区域划分和GC机制

Java 内存区域和GC机制 目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢.这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制.概括地说,该机制对 JVM

JAVA 虚拟机深入研究(三)——Java内存区域

JAVA 虚拟机深入研究(一)--关于Java的一些历史 JAVA 虚拟机深入研究(二)--JVM虚拟机发展以及一些Java的新东西 JAVA 虚拟机深入研究(三)--Java内存区域 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的围城,城外的人想进去,城里的人想出来. Java运行的时候会把内存分为若干个,他们各有各的用途,每块区域的创建和销毁都是相对独立的,有的跟虚拟机一起混,有的则抱着用户的大腿同生共死. 按照第七版的<Java虚拟机规范>规定,JVM所管理的内存包括以下

Java 内存区域和GC机制-java概念理解

推荐几篇关于java内存介绍的文章 Java 内存区域和GC机制 http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html Jstatd方式远程监控Linux下 JVM运行情况 http://www.aiuxian.com/article/p-3218924.html 用Zabbix通过JMX方式监控weblogic http://www.huilog.com/?p=688 消息队列 http://kb.cnblogs.com

Java虚拟机2:Java内存区域及对象

http://www.cnblogs.com/xrq730/p/4827590.html 几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB,相邻单位之间都是1024倍,1024为2的10次方,即 1Byte = 8bit,1K = 1024Byte,1M = 1024K,1G = 1024M,1T = 1024G 2.计算机存储元件 寄存器:中央处理器

Java 内存区域详解

引言 学习Java也有一段时间了,总感觉有些东西学的不是很精通.例如Java内存区域到底是怎么样的?程序是怎么跑的?对象是怎么存放的?这些都影响了我对自己的代码的熟悉程度. 一 运行时数据区域 Java虚拟机在执行java程序的过程中,会把它所管理的内存划分成若干个不同的数据区域(每当运行一个java程序都会启动一个虚拟机).有一本书叫做<Java虚拟机规范>,讲述了Sun公司对Java虚拟机实现的相关规范,其中讲了虚拟机将所管理的内存分为以下几个部分: 程序计数器 虚拟机栈 本地方法区 堆

Java内存区域和内存分配

最近面试时经常会被问到JVM以及内存分配的问题,觉得有必要学习总结一下下~~~ 一.Java内存区域 Java中,虚拟机自动进行内存管理,在Java虚拟机执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,主要包含以下几个部分: 1.程序计数器: 当前线程所执行的字节码的行号指示器: 字节码解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 线程私有:为了线程切换后能够恢复到正确的执行位置,每个线程需要有一个独立的程序计数器: JAVA方法,计数器记录正在执行

深入理解java虚拟机系列(一):java内存区域与内存溢出异常

文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了开始.如果有什么错误或者遗漏,欢迎指出. 一.概述 先上一张图 这张图主要列出了Java虚拟机管理的内存的几个区域. 常有人把Java内存区分为堆内存(Heap)和栈内存(Stack),这种分法比较粗糙,Java内存区域的划分实际上远比这复杂,从上图就可以看出了.堆栈分法中所指的"栈"实际上只是虚拟机栈,或者说是虚拟机栈中的局部变量表部分.接下

深入了解Java虚拟机(1)java内存区域与内存溢出异常

java内存区域与内存溢出异常 一.运行时数据区域 1.程序计数器:线程私有,用于存储当前所执行的指令位置 2.Java虚拟机栈:线程私有,描叙Java方法执行模型:执行方法时都会创建一个栈帧,存储局部变量,基本类型变量,引用等信息 3.Java本地方法栈:线程私有,为虚拟机使用到的Native方法服务 4.Java堆:线程共享,是垃圾收集器的主要工作地方:存储对象实例等 5.方法区:线程共享:存储类信息,常量,静态变量等 运行时常量:存放编译时生成的各种字面量和符号引用 6.直接内存:机器的内