【Java 之 JVM】Java内存结构概述
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWl3dXpoaWxpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="700" height="400" alt="">
JVM体系主要包括下面部分:
类载入器、运行引擎,内存区。本地方法调用。
内存区一般即指执行时数据区。以下概括下各部分存储什么内容和作用:
程序计数器(PC寄存器):
线程私有。
是一块较小的内存,可看作是线程所运行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条须要运行的字节码指令,分支、循环跳转、异常处理、线程恢复等基础功能都须要依赖这个计数器来完毕。
每一个线程切换后能恢复到正确的运行位置。每条线程都有独立的程序计数器,各线程私有。入正在运行Java方法,记录正在运行的虚拟机字节码指令的地址。假设正运行Native方法,为空。没有规定不论什么OutOfMemoryError情况的区域。
Java虚拟机栈:
线程私有。
描写叙述Java方法运行的内存模型:每一个方法在运行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至运行完毕的过程。就相应一个栈帧在虚拟机栈中入栈到出栈的过程。就是我们常分的“堆”和“栈”中的栈,或者说是局部变量表部分。
局部变量表存放编译器可知的基本数据类型和引用类型(不是对象本身,指向对象的起始地址的引用指针或者该对象的句柄)。局部变量表所需内存空间在编译期间完毕分配。当进入一个方法时。这种方法须要在栈中分配多大的局部变量空间是全然确定的。
本地方法栈:
与虚拟机栈作用相似,不同的是虚拟机栈为运行Java方法(字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。有的虚拟机入Sun Spot已将此部分与虚拟机栈合并。
Java堆:
线程共享。是Java虚拟机所管理的内存中最大的一块。在虚拟机启动时创建。唯一目的就是存放对象实例,差点儿全部对象实例都在分配内存。是垃圾收集器管理的主要区域。亦成为“GC堆”。
垃圾收集器基本都採用分代收集算法,所以,java堆还能够细分为:新生代和老年代;再细一点可分为Eden空间、From Survivor空间、To Survivor空间等。物理不连续,逻辑连续。
可固定大小也可扩展。
方法区:
线程共享。存储已被虚拟机载入的类信息、常量(final)、静态变量(static)、即时编译器编译后的代码等数据。JVM规范将其描写叙述为堆的一个逻辑部分。但却有个别名——非堆,就是为与Java堆区分开来。sun spot称之为永久代。
执行时常量池:
方法区的一部分。Class文件除了有类的版本号、字段、方法、接口等描写叙述信息外,另一项就是常量池。用于存放编译期生成的各种字面量和符号引用,这部分在类载入后进入方法区的执行时常量池中存放。
一般来说,除了Class文件里描写叙述的符号引用外,还会把翻译出来的直接引用也存储在执行时常量池中。
直接内存:
不属于是执行时数据区一部分,也不是JVM规范中定义的区域。
由于这部分内存被频繁使用,所以也要关注。在JDK1.4引入NIO类,引入了基于通道(Channel)与缓冲区(Buffer)的I/O方式。它能够使用Native函数库直接分配堆外内存。然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。
这样能在一些场景中显著提高性能,因此避免了在Java堆和Native堆中来回复制数据。
版权声明:本文博主原创文章。博客,未经同意不得转载。
【Java 之 JVM】Java内存结构概述的更多相关文章
- 巩固java(二)----JVM堆内存结构及垃圾回收机制
前言: 我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构 ...
- Java虚拟机JVM学习01 流程概述
Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...
- 如何设置Java虚拟机JVM启动内存参数
Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数.具体设置方法为: Tomcat修 ...
- java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03| 分类: JAVA | 标签:java jvm 堆内存 虚拟机 |举报|字号 订阅 JVM的内部结构 ...
- JVM的内存结构,JVM的回收机制
内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...
- JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)
一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...
- JVM之内存结构详解
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...
- JVM的内存结构以及性能调优
JVM的内存结构以及性能调优 发布时间: 2017-11-22 阅读数: 16675 JVM的内存结构以及性能调优1:JVM的结构主要包括三部分,堆,栈,非堆内存(方法区,驻留字符串)堆上面存储的是引 ...
- JVM的基本结构和JVM的内存结构
这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫JVM内存模型. 1.JVM的基本结构 ...
- JVM:内存结构
JVM:内存结构 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 程序计数器 虚拟机栈 本地方法栈 堆 方法区 直接内存 1. 程序计数器 1.1 定义 P ...
随机推荐
- s nrmtyu,yi.sfn rt
http://www.zhihu.com/collection/24337307 http://www.zhihu.com/collection/24337259 http://www.zhihu.c ...
- CH BR4思考熊(恒等有理式-逆波兰表达式求值)
恒等有理式 总时限 10s 内存限制 256MB 出题人 fotile96 提交情况 4/43 描述 给定两个有理式f(X)与g(X),判断他们是否恒等(任意A,如果f(A)与g(A)均有定义,那么f ...
- zabbix监控nginx连接状态(转)
zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...
- java中浮点数的比较(double, float)(转)
问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); Sy ...
- hdu1255(线段树——矩形面积交)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意:求N个矩形中,求被覆盖至少俩次的面积和 分析:覆盖两次即col[rt]>=2就好.一 ...
- Java自学资料——线程
[转]传智播客成都java培训中心学员笔记. 线程: static int MAX_PRIORITY 线程能够具有的最高优先级. static int MIN_PRIORITY 线程能够具有的最低优先 ...
- 【Unity Shaders】使用CgInclude让你的Shader模块化——Unity内置的CgInclude文件
本系列主要參考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图. 这里是本书所需的代码 ...
- CSDN的SDCC大会(2013)中使用的PPT分享
SDCC大会今天开完个.呵呵~ PPT下载链接在最后面,对内幕不感兴趣的可以直接无视下面的种种啰嗦直接“嗖”到最后. 这里说说这个大会中我的Topic. 此前CSDN向我约了一个主题,我回复说, 我可 ...
- uva10635 LCS映射转LIS
题目给定 2个序列,要我们求LCS,但是序列的长度最长是250*250, LCS的时间复杂度是O(N*N),所以无法解决 我们可以第一个序列的数字,按位置,映射为1.2.3.4.5.6.7.8.9 那 ...
- 使IIS Express支持其他网络客户端访问
今天尝试利用Android客户端Web浏览器访问VS2012 IIS Express调试中的Web应用,发现这个IIS Express仅支持localhost主机名地址访问. 上网搜索找到解决方案,几 ...