JVM——java虚拟机内存结构简介

JAVA虚拟机内存结构示意图

各区域介绍

程序计数器

    程序计数器,用来记录每一个线程正在执行的指令地址。每一个线程有一个线程计数器,因此该区域是“线程私有”的内存,生命周期与线程相同。如果线程执行的是native本地方法,则程序计数器为空。

虚拟机栈区

    每当线程执行一个方法时,虚拟机就会在这个区域创建一个栈帧,用于存储局部变量、动态链接、方法出口等信息。该区域也是"线程私有"的内存。

本地方法栈

    本地方法栈主要是用来执行Native方法服务的

Java堆

    所有线程共享的一块儿区域,在虚拟机启动的时候被创建。该区域唯一的目的就是保存对象实例,虚拟机内存管理也主要是对这一块区域进行垃圾回收(GC)。为了GC,虚拟机将本区域划分了几个子区域:新生代(Eden区、From Survivor区、To Survivor区)、老生代。

方法区

    用于存放虚拟机加载的类信息、常量、静态变量、代码数据等,此区域是通常意义上所指的永久代。运行时常量池属于本方法区,用于存放各种字面常量与符号引用。

    

原文地址:https://www.cnblogs.com/qq455988971/p/8301931.html

时间: 2024-11-05 12:22:55

JVM——java虚拟机内存结构简介的相关文章

从一道面试题深入了解java虚拟机内存结构

记得刚大学毕业时,为了应付面试,疯狂的在网上刷JAVA的面试题,很多都靠死记硬背.其中有道面试题,给我的印象非常之深刻,有个大厂的面试官,顺着这道题目,一直往下问,问到java虚拟机的知识,最后把我给问住了. 我当时的表情是这样的: 后来我有机会面试别人了,也按照他的思路出面试题,很多已经工作了2年的程序员,结果也和我当年一样,都败在java虚拟机知识上. 我们先看面试题: String str1 = "hello Alunbar"; String str2 = new String(

Java虚拟机内存结构

起源 1960年Lisp语言: 第一门真正使用内存动态分配和垃圾回收的语言. 运行时数据区域 1.程序计数器 Program Counter Register 1. 当前线程所执行的字节码的行号指示器. 2. 字节码解释器的工作是通过改变这个计数器的值去选取下一条需要执行的字节码指令. 3. 每条线程都一个独立的程序计数器. 4. 如果执行java方法,该位置记录正在执行的字节码指令地址,如果是native方法,该位置为空. 该部分是唯一不会OutOfMemory的部分. 2.Java虚拟机栈

JVM笔记2-Java虚拟机内存管理简介

java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区:运行时常量池,已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据 2.java堆:存储对象实例 2.线程独占区,是每一个线程都有自己独立的虚拟机栈,本地方法栈,程序计数器. 1.虚拟机栈:存储方法运行时所需的数据,成为栈帧. 2.本地方法栈:为JVM所调用到的native即本地方法服务. 3.程序计数器:记录当前线程所执行到的字节码的行号. 原文地址:https

JVM(java 虚拟机)

JVM(java 虚拟机) 一.JVM简介 1.JVM:Java Virtual Machine (java 虚拟机) 通过软件来模拟出来的具有完整的硬件系统功能.运行在完全隔离的环境中的完整的计算机系统. 2.种类: 1)Sun Classic 经典款2)Exact VM 准确式内存管理3)Sun HotSpot VM 热代码跟踪 二.JVM运行时的区域 1.运行时的区域 2.线程隔离区域(程序计数器.java栈) 程序计数器:是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改

Java虚拟机内存分配详解

简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数据结构,这种方式的特点,让程序员编程时,必须特别注意递归方法要尽量少使用,另外栈的大小也有一定的限制,如果过多 的递归,容易导致stack overflow. 2.了解Java内存管理的细节,一旦内存管理出现问题,有助于找到问题的根本原因所在. 3.了解Java内存管理的内幕,有助于优化JVM,从而

java虚拟机底层结构详解[转]

本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本语法到SSH框架.这里面应该包含了在java领域里面的大部分内容了吧.但是,那些知识点是让我们从一个应用的层面上了解了java,java程序真正底层的运行机制和一些底层虚拟机的工作我们还不了解,虽然这些内容在我们真正的开发中几乎用不到这些底层的东西,但对于我们对java的理解会有比较大的帮助.尤其也对以后

Java虚拟机底层结构详解

Java虚拟机 Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器.堆栈.寄存器等,还具有相应的指令系统.下面我们就来看一下这几部分比较重要的java虚拟机的结构: 1)JVM寄存器 所有的CPU均包含用于保存系统状态和处理器所需信息的寄存器组.如果虚拟机定义义较多的寄存器,便可以从中得到更多的信息而不必对栈或内存进行访问,这有利于提高运行速度.然而,如果虚拟机中

深入java虚拟机(一)——java虚拟机底层结构详解

在以前的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本语法到SSH框架.这里面应该包含了在java领域里面的大部分内容了吧.但是,那些知识点是让我们从一个应用的层面上了解了java,java程序真正底层的运行机制和一些底层虚拟机的工作我们还不了解,虽然这些内容在我们真正的开发中几乎用不到这些底层的东西,但对于我们对java的理解会有比较大的帮助.尤其也对以后java开发中的性能优化有很大帮助,可以使我们减少一些没必要的内存浪费等好处.所以,从今天开始,我将和大家一起

[Java基础] Java对象内存结构

转载地址:http://www.importnew.com/1305.html 原文于2008年11月13日 发表, 2008年12月18日更新:这里还有一篇关于Java的Sizeof运算符的实用库的文章. 学C/C++出身的我,对Java有一点非常困惑,那就是缺乏计算对象占用内存大小的机制.而在C++中就可以通过sizeof运算符来获得基本类型以及类实例的大小.C和C++中的这个操作符对于指针运算.内存拷贝和IO操作都非常有用. Java中并没有一个类似的运算符.事实上,Java也不需要这种运