文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上一张图 这张图主要列出了Java虚拟机管理的内存的几个区域. 常有人把Java内存区分为堆内存(Heap)和栈内存(Stack).这样的分法比較粗糙,Java内存区域的划分实际上远比这复杂.从上图就能够看出了. 堆栈分法中所指的"栈"实际上仅仅是虚拟机栈,或者说是虚拟机栈中的局部变量表部分…
Java内存区域划分 Java虚拟机运行时的数据区大致可划分为五部分:方法区,堆(两部分组成Java堆内存),虚拟机栈,本地方法栈(Java栈内存),程序计数器. 1.程序计数器 程序计数器占较小的内存空间,可看作当前线程所执行的字节码的行号指示器.由于虚拟机的多线程通过线程轮流切换并分配处理器执行时间来实现的,所以在任何一个时候,一个处理器都只会执行一个线程中的指令.因此,对于每个线程,必须要通过程序计数器来对其进行标志,从而进行区分.各程序计数器之间是相互独立存储的.称程序计数器所占有的这部…
Java虚拟机运行时数据区域 ⑴背景:对于c/c++来说程序员来说,需要经常去关心内存运行情况,但对于Java程序员,只需要在必要时关心内存运行情况,这是因为在Java虚拟机自动内存管理机制的帮助下,不再Java程序员需要为每一个新生成对象去释放资源,这些事情都将交由Java虚拟机去做,但为什么我们还需要学习Java虚拟机呢?这是因为Java程序员吧内存控制权交给Java虚拟机之后一旦出现了内存泄漏和溢出,不了解Java虚拟机的内存运行,排查将会非常困难. (图片来自网络) Java虚拟机运行时…
1.java内存区域与内存溢出异常 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域:1.程序计数器,2.栈(虚拟机栈和本地方法栈 ),3.堆,4.方法区(包含运行时常量池).程序计数器和栈(虚拟机栈和本地方法栈 )为线程私有的,堆和方法区(包含运行时常量池)为线程共享的. 1.1程序计数器 程序计数器是一块儿较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码 指令,分支.…
第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域  …
java内存区域与内存溢出异常 一.运行时数据区域 1.程序计数器:线程私有,用于存储当前所执行的指令位置 2.Java虚拟机栈:线程私有,描叙Java方法执行模型:执行方法时都会创建一个栈帧,存储局部变量,基本类型变量,引用等信息 3.Java本地方法栈:线程私有,为虚拟机使用到的Native方法服务 4.Java堆:线程共享,是垃圾收集器的主要工作地方:存储对象实例等 5.方法区:线程共享:存储类信息,常量,静态变量等 运行时常量:存放编译时生成的各种字面量和符号引用 6.直接内存:机器的内…
2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2.2运行时的数据区域 vm会将管理的内存划分为不同的区域,不同的区域间有各自的用途,以及创建和销毁时间.具体的区域划分如下图: 注:执行引擎跟本地库接口不是内存数据区,方法区跟堆内存才是共享的内存数据区 2.2.1程序计数器 是一块较小的内存地址,可以认为是当前线程所执行的字节码的行号指示器.在概念…
运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户现场的启动和结束而建立和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图 程序计数器 1. 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码和行号指示器. 2. 字节码解释器工作时就是通过改变这个计…
2. java内存区域于内存溢出异常 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java而言,则把内存控制的权利交给了java虚拟机,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄露和溢出问题.但是,一旦出现内存泄露和溢出方面的问题,如果不了解虚拟机内存运行过程,排查会很艰难.以下是整个java虚拟机运行的基本结构. 2-1 2.2 运行时数据区域 java虚拟机运…
一.java的体系构成: Java的技术体系主要由支撑java程序运行的虚拟机.提供各种开发领域接口支持的java api.java编程语言及许多第三方java框架(如Spring .Struts等)构成. 二.JDK与JRE的区别: Java程序设计语言,java虚拟机和java API类库这三部分统称为JDK,是用于支持java程序开发的最小环境. 把Java API类库中的java SE API 子集和java虚拟机这两部分统称JRE,JRE是支持java程序运行的标准环境. 三.未来发展…