Java虚拟机之Java内存区域

Java虚拟机运行时数据区域

⑴背景:对于c/c++来说程序员来说,需要经常去关心内存运行情况,但对于Java程序员,只需要在必要时关心内存运行情况,这是因为在Java虚拟机自动内存管理机制的帮助下,不再Java程序员需要为每一个新生成对象去释放资源,这些事情都将交由Java虚拟机去做,但为什么我们还需要学习Java虚拟机呢?这是因为Java程序员吧内存控制权交给Java虚拟机之后一旦出现了内存泄漏和溢出,不了解Java虚拟机的内存运行,排查将会非常困难。

Java虚拟机运行时数据区

Java虚拟机的多线程通过线程轮换并分配处理器执行时间的方式来实现,任何一个确定时刻,一个处理器都只会执行一条线程中的指令。因此,为了时线程切换后能恢复到正确执行位置,每条线程都需要一个独立的程序计数器,线程之前有独立存储互不影响。

⑵程序计数器:程序计数器是一块较小的内存空间,字节码解释器工作时,通过改变计数器值选择下一条需要执行的字节码指令(分支、循环、跳转、异常处理、线程恢复都用到了程序计数器)。

Java虚拟机的栈:

时间: 2024-08-28 01:13:54

Java虚拟机之Java内存区域的相关文章

java虚拟机和java内存区域概述

什么是虚拟机,什么是Java虚拟机 虚拟机 定义:模拟某种计算机体系结构,执行特定指令集的软件 系统虚拟机(Virtual Box.VMware),进程虚拟机 进程虚拟机 jvm.Adobe FlashPlayer.FC模拟器 高级语言虚拟机 JVM ..NET CLR.P-Code java语言虚拟机 可以执行Java语言的高级语言虚拟机.Java语言虚拟机并不一定就可以称为JVM,譬如: Apache Harmony JavaTM虚拟机 必须通过Java TCK(Technology Com

Java虚拟机运行时数据区域

Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,及创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁.Java虚拟机所管理的内存包括以下几个运行时数据区域,如图(图片引自网络): 1.1 程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器.字节码解释器就是通过改变该计数器的值来选取下一条需要执

Java虚拟机:JVM内存分代策略

Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代.老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略. 为什么要分代? 堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,我们程序所有的对象实例都存放在堆内存中.给堆内存分代是为了提高对象内存分配和垃圾回收的效率.试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收都要遍历所有的对象,遍历这些对象所花费

Java虚拟机运行时数据区域划分

Java虚拟机数据运行时区域 方法区(Method Area) 存储加载的类信息,常量,静态变量,编译器编译后的代码等数据.虽然JVM规范把方法区描述为堆的一个逻辑部分,但它却有一个别名叫做Non-Heap.Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项是常量池,用于存放编译器生成的各种字面量和符号引用,包括字符串常量.JVM加载Class后把常量池中的数据放入到运行时常量池.方法区的运行时数据(包括运行时常量池)是线程共享的. 堆(Java Heap) 堆是被线程共享的

Java 虚拟机: JVM内存分区及其用途

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1.程序计数器 2.Java虚拟机栈 3.本地方法栈 4.Java堆 5.方法区 下面分别介绍各个内存分区及它们的作用: 1.程序计数器 (PC)程序计数器是一块较小的内存分区,你可以把它看做当前线程所执行的字节码的指示器.

深入理解 Java 虚拟机——走近 Java

1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统.移动终端 .企业服务器 .大型机等各种场合.特点:Java 能获得如此广泛的认可,除了它拥有一门 结构严谨.面向对象 的编程语言之外,还有须有不可忽视的有点,主要有如下几点.它摆脱了硬件平台的束缚,实现了 一次编写,到处运行 的越界问题.它实现了 热点代码检测 和 运行时编译及优化 ,这使得 J

深入理解java虚拟机一 JAVA运行时内存区域与class文件

一 JAVA运行时内存区域 JVM在加载class文件时,会将class文件定义的数据结构转为运行时内存中的数据,那么jvm是如何安排运行时的内存区域呢? jvm将运行时内存划分为以下几个部分: 堆:所有线程共享 方法区:类信息.静态变量.常量等 运行时常量池:class文件的常量池(字面常量和符号引用)+运行时产生的常量 程序计数器:  当前线程执行的字节码的行号指示器 虚拟机栈:栈帧 = 本地局部变量表.操作数栈.动态链接.出口信息 本地方法栈:native方法 直接内存:不属于jvm管理,

【java虚拟机】java内存区域与内存溢出异常

本文参考自<深入理解Java虚拟机>一书.主要总结一下java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题. 1. 运行时数据区域 java虚拟机在执行java程序的过程中会把它说管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.具体如下图所示: 结合这张图,下面逐个来分析一下每个数据区域的特点. 1.1 程序计数器(Program Counter

Java虚拟机学习-Java内存区域(一)

Java虚拟机内存划分为以下几个区域: 1.方法区:方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它有一个别名叫做Non-Heap(非堆),目的是与Java堆分开来. 对于习惯在HotSpot虚拟机上开发.部署的程序开发者来说,很多人更愿意把方法区称为"永久代",本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分带手机扩展至方法区,或者说使用