关于java自动内存管理

  1. 什么是虚拟机?

    它是模拟某种计算机的体系结构,执行特定指令集的软件。 例如:vmware

    jvm是进程虚拟机,他不会模拟一个操作系统的运行。只是提供特定指令集。

    在《java虚拟机规范》中定义了若干种程序运行期间会使用到的存储不同类型数据的区域。

  2. 运行时数据区的划分。

程序计数器   java堆  java虚拟机栈   本地方法栈  方法区

程序计数器:一块较小的内存空间,他的作用可以看作是当前线程所执行的字节码的行号指示器。

它是线程私有的,如果正在执行的一个java方法,那么计数器记录的是自己吗指令的地址,如果是native方法   那么计数器的值是空。

本地方法栈 :线程私有,后进先出,作用是支撑Native方法的调用,执行退出。可能出现 OutOfMemoryError 异常和 StackOverflowError 异常。

时间: 2024-12-06 01:39:37

关于java自动内存管理的相关文章

Java自动内存管理机制学习(一):Java内存区域与内存溢出异常

备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.如下图所示: 2.1.1 程序计数器 程序计数器是一块较小的内存空间,它是线程的私有内存,可以看作时当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去

java自动内存管理机制

java程序员把内存管理的工作交给虚拟机,一旦出现内存泄露或者溢出问题,如果不了解内存是怎样工作的,那么排查错误将是一件异常艰难的工作. java内存区域与内存溢出异常 java运行时数据区域划分: 线程隔离的 1.程序计数器(Program Counter Register) 当前线程执行代码的行号指示器,当线程切换并分配处理器执行时间,为了保证线程恢复到正确的执行位置,每个线程都有独立的计数器 2.虚拟机栈(VM Stack) 虚拟机栈描述的是java方法执行的内存模型:每个方式执行的同时会

十分良心!全网最详细的Java 自动内存管理机制及性能优化教程

同样的,先来个思维导图预览一下本文结构. 一图带你看完本文 一.运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造.根据<Java虚拟机规范(Java SE 7 版)>的规定,请看下图: Java 虚拟机运行时数据区 1.1 程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个

JVM自动内存管理机制——Java内存区域(下)

一.虚拟机参数配置 在上一篇<Java自动内存管理机制--Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a)下面是一些简单的使用参数 其中最后一个是一个运行时参数设置的简单实例.一般-XX是系统级别的配置(日志信息,或者是配置使用什么样的垃圾回收器等等),后面跟上+表示启用.不是-XX基本上是对于应用层面的配置信息 下面是一个简单的实例:表示设置初始堆大小为5M,最大堆大小为20M,并将虚拟机的参数设置打印出来,后

JVM自动内存管理机制——Java内存区域

一.JVM运行时数据区域概述 Java相比较于C/C++的一个特点就是,在虚拟机自动内存管理机制的帮助下,我们不需要为每一个操作都写像C/C++一样的delete/free代码,所以也不容易出现内存泄漏和内存溢出的问题.显然,这里的不容易只是相对而言的,如果我们想要降低这种代码隐患的发生,就需要对Java虚拟机怎样使用内存有了解,这样的话就算产生错误,排查起来也会相对容易.下面我们来说一说JVM运行时数据区域 1.程序计数器(PC寄存器): 被看作是当前线程所执行的字节码的行号指示器,字节码解析

2.1 自动内存管理机制--Java内存区域与内存溢出异常

自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存包括以下几个运行时数据区域[虚拟机内存模型]: 1.程序计数器: 可以看作是当前线程所执行的字节码的行号指示器.在虚拟机中,字节码解释器工作时就是通过程序计数器的值来选择下一条需要执行的字节码指令.Java虚拟机中多线程是通过线程轮流切换并分配处理机执行时间的方式实现的,在任何一个确定的时刻,一个处

JAVA之自动内存管理机制

一.内存分配 1.JVM体系结构 2.运行时数据区域 3.内存分配二.内存回收 1.垃圾收集算法 2.垃圾收集器三.相关参考一.内存分配JVM体系结构 在了解自动内存管理的内存分配之前,我们先看下JVM的体系结构.代码编译的结果是从本地机器码转变为字节码,经过类加载器加载到虚拟机后才能执行程序.JVM的体系结构主要如下图所示: JVM体系结构 运行时数据区域 在上图中我们可以清楚地看到,JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域,分别是程序计数器.Java虚拟机栈

垃圾回收算法手册:自动内存管理的艺术 BOOK

垃圾回收算法手册:自动内存管理的艺术 2016-03-18 华章计算机 内容简介 PROSPECTUS 本书是自动内存管理领域的里程碑作品,汇集了这个领域里经过50多年的研究沉积下来的最佳实践,包含当代最重要的垃圾回收策略与技术,著译双馨. 几乎所有的现代编程语言都采用了垃圾回收机制,因此深入了解此方面内容对于所有开发者而言都大有裨益.对于不同垃圾回收器的工作方式,以及当前垃圾回收器所面临的各种问题,这本权威手册都提供了专业的解答.掌握这方面的知识之后,在面对多种不同的垃圾回收器以及各种调节选项

Java虚拟机内存管理机制

自动内存管理机制 Java虚拟机(JVM)在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则是依赖用户线程的启动和结束而建立和销毁.根据<Java虚拟机规范 第2版>规定,运行时数据区包括: 1.程序计数器 一块较小的内存空间,不在Ram上,而是直接划分在CPU上的,程序员无法直接操作它.当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选取下一条需要执行的字节码指令.每条