Java内存区域总结
一、Java内存模型
Java运行时数据区一般分为:程序计数器区、方法区、Java栈、Java本地栈、Java堆组成。
1、程序计数器
程序计数器是线程私有的一块较小的内存区域,用于保存当前线程执行字节码的行号指示器,线程的切换、异常都能正确的恢复到指定的要执行的字节码位置都是这个行号指示器的功能,这个区域是一个唯一一个没有抛出OutOfMemoryError的异常。
2、Java栈
Java栈也是线程私有的一块内存区域,它的生命周期与线程的生命周期相同。一个方法被执行的同时会创建一个栈帧,将其压入栈中,方法执行完成的同时就会把此栈帧弹出栈,也就是一个方法从被执行到退出也就是一个栈帧入栈出栈的过程。以前我们经常说的”Java堆”和“Java栈”,很粗的一个说法 —堆也可能说的另外的一个内存区域-堆,栈应该说的不是Java栈,应该是Java栈中的局部变量表-用于保存基本数据类型信息(如:int float long )和对象引用指针、返回类型指针。虚拟机设置参数: -Xxs200k (注意栈的内存大小最少为160k),也可能出现OutOfMemoryError的异常,当请求栈的深度大于JVM所允许的栈的最大深度的时候会抛出一个SatckOverflowError的异常。
3、方法区
方法区是所有线程共享的一片内存区域,用于保存类信息、方法名、静态变量、常量等信息。我们也成为永久代。常量池是方法区的一部分,用于保存字面量和符号。在JVM中设置参数为:-XX:PermSize100M -XX:MaxPermSize300M。也可能出现OutOfMemoryError的异常
4、堆
堆这块内存区域是最为重要的一片内存区域,几乎所有的对象实例都保存在此区域,也是GC管理最重要的区域,也成为GC堆。堆也可以细划分为:老年代和新生代。JVM设置参数:
-Xms10M -Xmx100M 当申请的内存无法申请到足够的内存的时候会出现OutOfMemoryError的异常信息。
5、对象访问
对象访问也就是reference类型如 Object object = new Object();
Object object 这个反应到虚拟机栈中的局部变量表中保存reference类型出现,new Object();这会出现在Java堆中将对象实例放在此内存区域,Object 类型的体现出这些信息保存在方法区中。
reference类型数据访问对象有两种:
5.1、基于句柄池
基于句柄池的对象访问方式是在Java堆中创建一个句柄池,句柄池中保存堆中实例对象的内存地址,而reference 类型的数据保存了堆中句柄池中的一个地址。
5.2、直接内存地址
直接内存地址是reference类型的数据保存的就是Java堆中的所在的实例的地址。
6、直接内存
直接内存不是JVM中的运行时数据区的一部分,这部分也会被频繁的使用。在JDK1.4中引入了NIO 基于通道和缓冲区的新的I/O,可以使用本地函数直接在分配堆以外的内存,在堆中保存一个DrectByteBuffer的直接内存的地址,这样操作可以避免了本地堆和Java堆来回复制数据的问题。这要注意我们在配置Java堆参数的时候一定要考虑到直接内存所占内存的一部分。
相关推荐
JAVA内存分区与CC++内存分区的总结
JAVA 内存管理总结 1. java是如何管理内存的 2. 什么叫java的内存泄露 3. JVM的内存区域组成 4.Java中数据在内存中是如何存储的 5. Java的内存管理实例
本文介绍了Java内存溢出的详细解决方案。本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误。作者分析了JVM内存区域组成及JVM设置虚拟内存的方式,从而...
1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本...4.1 JVM内存管理:深入Java内存区域与OOM 4.2 JVM内存管理:深入垃圾收集器与内存分配策略 4.3 深入理解JVM
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...
请你描述一下 Java 的内存区域? 请你描述一下 Java 中的类加载机制? 在 JVM 中,对象是如何创建的? 内存分配方式有哪些呢? 请你说一下对象的内存布局? 对象访问定位的方式有哪些? 如何判断对象已经死亡? 如何...
而且这两个问题针对的内存区域就是Java内存模型中的堆。垃圾回收机制的引入可以有效的防止内存泄露、保证内存的有效使用,也大大解放了Java程序员的双手,使得他们在编写程序的时候不再需要考虑内存管理。本文主要对...
主要介绍了一篇文章总结Java虚拟机内存区域模型,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用、服务对象以及其中可能产生的问题,作为大家的面试宝典。,需要的朋友可以参考下
• 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、NIO、AIO),熟悉JVM类加载过程与...
jvm内存分区,gc算法,类加载机制。并发编程,并发编程各大容器,锁。框架spring mybatis原理,组件介绍。架构设计有设计模式,负载均衡。网络有协议,java 高并发io框架netty。数据结构包括堆栈,队列,链表,...
Java内存区域与内存溢出 Java虚拟机中的内存分配图: 各个区域的特性总结如下表: 补充说明: 当多线程情形下,可能多个线程要在堆上分配内存,那么可能出现内存分配的同步问题,解决方案有两个...
第28节Java内存区域-直接内存和运行时常量池00:15:53分钟 | 第29节对象在内存中的布局-对象的创建00:21:19分钟 | 第30节探究对象的结构00:13:47分钟 | 第31节深入理解对象的访问定位00:08:01分钟 | 第32节垃圾...
jvm内存分区,gc算法,类加载机制。并发编程,并发编程各大容器,锁。框架spring mybatis原理,组件介绍。架构设计有设计模式,负载均衡。网络有协议,java 高并发io框架netty。数据结构包括堆栈,队列,链表,...
1.PC计算机一台,配置为CPU为P4 2.8G,内存为512M,硬盘为80G。 2.WindowsXP + JSDK1.5 + JCreatorPro3.5 四、实验算法设计 五、程序设计 import java.awt.*; import java.awt.event.*; import javax.swing.*; ...
最近在看java虚拟相关知识,把每天看到的一些内容做一个归纳总结,下面这篇文章主要给大家介绍了关于Java中内存区域的划分与异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看...
第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...
内存的区域划分,了解GC回收机制;重点关注如何去监控和发现内存问题;此外分析出问题还要如何解决内存问题。下面就开始本篇的内容:第一部分概念众所周知,java中的内存java虚拟机自己去管理的,他不想C++需要自己...
因为马上要准备实习面试了,而jvm又是面试常考的,我现在来总结一下jvm相关知识,而...这是大家所熟知的java内存模型,分为5个区域,下面说说我对他的认识: 1.程序计数器:首先它是线程私有的,是一个比较小的内存区
第2章 Java内存区域与内存溢出异常 2.1 概述 2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot...
详细解释内存区域