java中的常用内存区域总结
<开发实战经典>
(1)栈内存空间:保存所有的对象名称
(2)堆内存空间:保存每个对象的具体属性内容
(3)全局数据区:保存static类型的属性
(4)全局代码区:保存所有的方法定义
<--->
(1)栈区:存放局部变量
(2)堆区:存放对象属性,new出来的数据
(3)方法区:存储和class相关的信息
(4)本地方法区:系统相关,无需程序员管理
(5)寄存器:cpu相关,无需程序员管理
<深入理解java虚拟机>
(1)程序计数器(program counter register):
一块较小的内存空间,可看作是当前线程(线程私有)所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令.
(2)java虚拟机栈(vm stack):
也是线程私有,生命周期与线程相同,虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(stack frame)用于存储局部变量表/操作数栈/动态链接/方法出口等信息.每个方法从调用至完成的过程就对应着一个栈帧在虚机栈中从入栈到出栈的过程.
(3)本地方法栈(native method stack):
与虚拟机栈发挥的作用类似,区别在于虚拟机栈执行的是java方法服务,而本地方法栈执行的是本地(native)方法服务.
(4)方法区(method area):
与堆一样被所有线程共享,用于存储已被虚拟机加载的类信息/常量/静态变量/即时编译器编译后的代码等数据,也叫做非堆(non-heap),也有称为"永久代"的.包括运行时常量池(runtime constant pool)
--运行时常量池(runtime constant pool):
class文件中除了有类的版本/字段/方法/接口等描述信息外,还有就是常量池,用于存放编译器生成的各种字面量和符号引用.
(5)堆(heap):
内存中最大的区域,被所有线程共享.作用是存放所有对象实例及数组(暂不考虑逃逸分析技术).堆也是GC管理的主要区域,所以也被称作是"GC堆",由于收集器的分代收集算法,所以java堆还可以细分为:新生代和老年代(再细致一点的还有:eden空间-from survivor空间- to surviver空间).从内存分配的角度看,线程共享的java堆中可能划分出多个线程私有的分配缓冲区(TLAB).
java中的常用内存区域总结的更多相关文章
- Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
- java运行时的内存区域
1.概述 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线 ...
- JVM学习笔记(一):Java虚拟机和虚拟机内存区域
为什么Java程序需要运行在虚拟机上 因为Java在设计之初的跨平台特性,我们知道Java程序是运行在Java虚拟机上的.如果你要问为什么Java程序要运行在虚拟机上,我可以反问你几个问题. 为什么买 ...
- java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03| 分类: JAVA | 标签:java jvm 堆内存 虚拟机 |举报|字号 订阅 JVM的内部结构 ...
- Java宝典(四)------Java中也存在内存泄露。
--Java中会存在内存泄露吗? --如果你想当然的以为Java里有了垃圾回收机制就不会存在内存泄露,那你就错了. Java里也会存在内存泄露! 我们慢慢来分析. 所谓内存泄露就是指一个不再被程序使用 ...
- java中最常用jar包的用途说明
java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实 ...
- Java中最常用的集合类框架之 HashMap
一.HashMap的概述 HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构. HashMap是基于哈希表的Map接口实现的,此实现提供所有可选的映射 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java中会存在内存泄露吗?请简单描述。
本文转载自:Java中会存在内存泄漏吗,请简单描述 会.java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周 ...
随机推荐
- DataTable批量插入数据库
最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...
- CS231n 2016 通关 第六章 Training NN Part2
本章节讲解 参数更新 dropout ================================================================================= ...
- 二十五种网页加速方法和seo优化技巧
一.使用良好的结构 可扩展 HTML (XHTML) 具有许多优势,但是其缺点也很明显.XHTML 可能使您的页面更加符合标准,但是它大量使用标记(强制性的 <start> 和 <e ...
- 基于Go实现的秒杀系统
这是基于Go语言的一个秒杀系统,这个系统分三层,接入层.逻辑层.管理层.项目源码:https://github.com/BlueSimle/SecKill 系统架构图 秒杀接入层 从Etcd中加载秒杀 ...
- php封装pdo操作数据的工具类
<?php header("Content-Type:text/html;charset=utf-8"); class PdoMysql{ public static $co ...
- iOS三方支付--微信支付/支付宝支付
一.微信支付 1.注册账号并申请app支付功能 公司需要到微信开放品台进行申请app支付功能 , 获得appid和微信支付商户号(mch_id)和API秘钥(key) . Appsecret(secr ...
- Codeforces86D【莫队算法】
题意: 给一个序列和一些区间,每次询问对区间所有不同的数,求每个不同的出现的个数的平方*其值的总和 2*2*1+1*1*2 思路: 裸的莫队算法. 补: 1.cmp写错. 2.LL运算不会进行转化. ...
- IT兄弟连 Java语法教程 编译Java程序
编写好Java程序的源代码后,接下来就应该编译该Java源文件来生成字节码文件了. 编译Java程序需要使用JDK中提供的javac命令,因为已经把javac命令所在的路径添加到了系统的Path环境变 ...
- SpringMVC入门 bug集锦X3和SSM原始整合
- 架构sass文件
sass/ | |– base/ | |– _reset.scss # Reset/normalize | |– _typography.scss # Typography rules | ... # ...