精华内容
下载资源
问答
  • Java内存图

    2017-04-05 08:27:47
    Java内存图
  • java 内存图

    千次阅读 2017-05-16 16:41:06
    java内存图 栈:存放局部变量(在函数中定义的变量),被使用完立即释放 堆:存实体(数组和对象),new出来的,每个实体都有自己的内存地址,都有自己的默认初始化值(整数默认是0,double默认0.0,boolean...


    java内存图


    栈:存放局部变量(在函数中定义的变量),被使用完立即释放


    堆:存实体(数组和对象),new出来的,每个实体都有自己的内存地址,都有自己的默认初始化值(整数默认是0,double默认0.0,boolean默认值是false,char默认空字符)

    实体被使用完,在jvm空闲的时候,通过垃圾回收机制自动释放



    如下图,等号左边在栈里,右边在堆里

    因为当一个方法被运行的时候,就产生一个栈帧,这里运行main()方法,就在栈里开辟一块栈帧



    如下图,执行Person p = new Person()的时候,在栈里为main方法的Person p 开辟栈帧,右侧堆里开辟一块内存存放对象p的属性(姓名和年龄),同时把堆的地址存入栈帧里

    另,当speak()方法执行完成后,从栈内移除

    当main方法执行完成后,也从栈内移除






    把arr1里面存的地址赋值给arr2,并且把arr1里面的地址清空,这样就只有arr2指向了这块内存


    常见数据操作:

    1、长度:arr.length

    2、获取最大值int x = getMax(arr)






    等speak函数执行完,该函数在栈中的位置就清空,main函数执行完也清空



    展开全文
  • java内存图

    2018-09-25 11:03:26
    引用变量内存图 对象内存图

    引用变量内存图
    在这里插入图片描述
    对象内存图
    在这里插入图片描述

    展开全文
  • Java内存结构详解相信大多数Javaer对Java的内存结构都有一定的了解,但如果对于Java的内存结构只停留的"堆","栈"中显然是不够的。今天来给大家详细谈一谈Java的内存区域结构,本文基于 JDK7 的内存结构做讲解,JDK8...

    Java内存结构详解

    相信大多数Javaer对Java的内存结构都有一定的了解,但如果对于Java的内存结构只停留的"堆","栈"中显然是不够的。今天来给大家详细谈一谈Java的内存区域结构,本文基于 JDK7 的内存结构做讲解,JDK8的内存结构加上了metaspace,有些许变动,想详细了解的同学请自行翻阅相关资料。

    文章结构

    1.内存结构图

    2.根据内存结构图各个区域做详细讲解

    1 . 内存结构图

    98a0dca0e40a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    image.png

    图片说明

    方法区,堆区(标绿)为所有线程共享的内存区域,虚拟机栈,本地方法栈,程序计数器(标蓝)为线程似有的内存区域,即线程隔离的。

    2 . 各个区域详解

    程序计数器

    代码的运行是有顺序的,但当CPU在多线程间切换时,当从A线程切换到B线程,再切回到A线程时,CPU如何知道该从A线程的哪里继续执行呢?CPU工作时就是根据每个线程的程序计数器的值来选取下一条需要执行的字节码指令,即"找到它离开时的位置来继续执行"。需要提示的是,当CPU执行的是一个Java方法时,程序计数器记录的是正在执行的虚拟机字节码指令的地址。如果执行的是Native方法,这个计数器值为Undefined,即不发挥作用。

    虚拟机栈

    虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈和出栈的过程。局部变量表存放了编译期间可以知道大小的各种类型变量,它所需要的内存空间大小在编译期间就已经分配,当一个方法被调用时,栈帧进入虚拟机栈,在运行期间,局部变量表大小是不会变化的

    本地方法栈

    本地方法栈与虚拟机栈锁发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈为虚拟机执行Native方法服务。需要注意的是,由于虚拟机规范对于本地方法栈的具体实现没有做强制要求,所以Sun HotSpot直接把本地方法栈和虚拟机栈合二为一。

    Java堆

    Java堆是Javaer需要重点关注的一块区域,因为涉及到内存的分配(new关键字,反射等)与回收(回收算法,收集器等),这里不做太多详细的介绍内存的分配与回收,后期有时间专门出博客讲解。在Java虚拟机规范中的描述是:所有对象实例以及数组都要在堆上分配。需要特别注意的是,线程共享的Java堆中可能分出多个线程私有的分配缓冲区(TLAB,这是为了并发分配内存时的脏分配问题,需要使用相关参数来开启。虚拟机默认使用CAS加上失败重试机制解决脏分配问题)。此外,Java堆在HotSpot中的实现是可扩展的。参数-Xmx/-Xms来控制。

    方法区(永久代)

    方法区用于存储已经被虚拟机加载的类信息,常量("zdy","123"等),静态变量(static变量)等数据。方法区有一个别名叫永久代(Permanent Generation),这是因为HotSpot设计团队把GC分代收集扩展至方法区,这样HotSpot的垃圾收集器可以像管理Java堆一样管理这部分内存,能够省钱专门为方法区编写内存管理代码的工作。对于其他虚拟机(J9)等,是没有永久代这个概念的。永久代的配置参数: -XX:MaxPermSize

    运行时常量池

    运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量("zdy","123"等)和符号引用。运行时常量池具有动态性,并非只有Class文件中的内容才能进入运行时常量池,运行期间也能将新的常量放入池中。如String.intern()方法。

    附加--直接内存

    直接内存不是Java虚拟机规范的内存区域。但是这部分也被Javaer频繁使用,而且也会导致OutOfMember异常。所以这里顺带提一提。在JDK4中加入的NIO,使用了Native函数库直接分配堆外内存,然后通过一个缓存在Java堆中的Buffer来指向这块地址进行操作。这样能够避免Java堆和Native堆来回复制数据,在某些场景可以显著提高性能。直接内存不受任何虚拟机参数控制,但很明显,你不能大于物理内存大小。

    结语

    JDK7的内存模型就大致介绍完了.

    展开全文
  • Java 内存图简介

    2020-05-10 15:42:32
    一. Java内存三大块(五部分) 二.Java分析常用的三大部分(栈,堆,方法区) 通过案例实现的内存详解

    一. Java内存三大块(五部分)

    在这里插入图片描述

    二.Java分析常用的三大部分(栈,堆,方法区)

    通过案例实现的内存详解

    2.1 一个对象的内存图

    在这里插入图片描述

    2.1 两个对象使用同一个方法的内存图

    在这里插入图片描述

    2.3 两个引用指向同一个对象的内存图

    在这里插入图片描述

    展开全文
  • 分区Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区在运行时数据区里,会根据用途进行划分:Java虚拟机栈(栈区)本地方法栈Java堆(堆区)方法区程序计数器示意下面,我将详细介绍每个内存模型...
  • 创建一个对象通过画图来看下对象在内存中是如何分配的,这样更有助于初学者理解对象。学生类class Student{//学号int id;//姓名String name;//性别boolean sex;//年龄int age;public void study() { //定义学习的...
  • importjava.awt.FlowLayout;importjava.awt.Image;importjava.io.File;importjava.io.IOException;importjava.util.Vector;importjavax.imageio.Ima...源代码如下,是一个很简单的程序。import java.awt.FlowLayout;...
  • Each Java Virtual Machine thread has a private Java Virtual Machine stack, created at the same time as the thread. A Java Virtual Machine stack stores frames.(线程与栈一一对应,栈中包含多个栈帧(即...
  • 如果是一个类里面的静态成员变量和静态成员方法,它是存储在方法区的,静态成员变量是在方法区的静态域里面,而静态成员方法是在方法区的class二进制信息里面(.class文件和方法区里面的...通过中分析,很多问题也...
  • Java内存结构

    2020-04-14 09:15:11
    Java内存结构图Java内存结构 Java内存结构
  • Java内存模型

    2017-09-11 19:34:50
    原作者博客地址:Java内存模型 Java 内存模型 帮助理解的重要图片
  • java内存布局

    2016-04-20 16:02:52
    java内存分配
  • java内存变化

    2019-08-28 13:41:05
    java内存变化 代码: 编写Person类 public class Person { String name; int age; public void show(){ System.out.println("姓名:"+name+",年龄:"+age); }...
  • java内存分配

    2011-01-20 16:24:00
    java内存分析
  • 一个数组的内存图 二个数组的内存图 两个引用指向同一个数组的内存图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,020
精华内容 7,208
关键字:

java内存图

java 订阅