先上个图解:

1. 保存对象实例,实际上是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在stack中)。
对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例。
2. 基本数据类型包括byte、int、char、long、float、double、boolean和short。
函数方法属于指令.
引用网上广泛流传的“Java堆和栈的区别”里面对堆和栈的介绍:
"Java 的heap堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。"
“stack栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。 ”
JVM物理结构图

JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)。
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
示例图:

分享到:
相关推荐
### Java学习笔记知识点详解 ...以上是关于Java学习笔记中的一些核心知识点的总结,包括环境配置、基础知识、流程控制、面向对象编程和内存管理等方面的内容。这些知识点对于初学者理解和掌握Java编程语言至关重要。
### Java数据结构与算法学习笔记知识点总结 #### 一、数据结构概述 数据结构是对数据的一种组织形式,它决定了数据的存储方式以及处理数据的方法。常见的数据结构包括但不限于数组、链表、栈、队列、二叉树、图等...
Java的内存管理机制包括对堆(heap)和栈(stack)的管理。堆用于存储对象实例,而栈用于存储引用类型变量,即对象的引用(或地址)。Java的引用类型包括类类型、接口类型和数组类型。当引用类型变量不再有任何引用...
JVM内存主要分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。其中,对象实例主要在堆内存中分配,而方法调用时的局部变量存储在栈中...
首先,我们要理解Java内存的两个主要部分:堆(Heap)和栈(Stack)。堆主要用于存储对象实例,而栈则用于存储基本类型变量和对象引用。堆内存是全局的,所有线程共享,它的大小在JVM启动时可以指定。栈内存则是每个...
在Java中,内存主要分为两大块:栈(stack)和堆(heap)。栈内存主要用于存储基本类型的数据和对象的引用,而堆内存则是用于存储所有对象的实例。这种机制使得程序员可以专注于业务逻辑,而无需过多关心内存的分配...
最后,文档介绍了JVM的内存模型,包括堆(Heap)和栈(Stack),以及对象在内存中的分配和回收机制。这是Java开发者需要具备的核心知识之一,因为不当的内存管理可能会导致内存泄漏等问题。 整体来看,这份Java入门笔记...
这份"Java学习笔记_内存管理.pdf"很可能是详细解析了Java如何进行内存分配、垃圾回收以及内存泄漏等相关概念。下面,我们将深入探讨Java内存管理的一些核心知识点。 1. **Java内存模型**: - **堆内存(Heap)**:...
Java是一种广泛使用的面向对象的编程语言,其设计目标是具有良好的可移植性、...这些只是Java编程中的部分核心概念,深入学习还需要掌握异常处理、多线程、输入输出、集合框架、网络编程、IO流、反射、泛型等更多主题。
4. **内存分配**:Java内存分为堆(Heap)和栈(Stack)。栈用于存储局部变量和方法调用,而堆则存储对象实例。此外,还有数据段(Data Segment)存储代码和常量,以及代码段(Code Segment)存储程序的机器指令。 ...
JVM内存主要分为五个区域:堆内存(Heap)、虚拟机栈(Java Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。这五部分构成了JVM运行时数据区。 1. ...
内存管理在Java中分为几个区域:code segment(代码区)存储程序的字节码,data segment(数据区)用于存储静态变量和字符串常量,stack(栈)处理方法调用和局部变量,而heap(堆)是动态分配变量的地方,主要用于...
- **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)**:存放通过`new`关键字创建的对象实体。 - **静态存储区**:存储对象中的静态成员。 - **常量存储区**:存储常量。 - **非...
内存管理方面,代码段存放程序的指令,数据段存储静态变量和字符串常量,栈(Stack)用于存放局部变量和函数调用信息,而堆(Heap)则用来动态分配内存,存储通过new创建的对象。 最后,Java的数据类型包括基本类型...
局部变量存储在栈内存(Stack)中,成员变量存储在堆内存(Heap)中,静态变量(Static)存储在数据段(Data segment)中,而代码则存放在代码段(Code segment)。 4. **垃圾回收**:Java有一个自动垃圾回收机制,...
2. **内存模型**:JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。堆内存用于存储对象实例,栈内存存储方法调用,方法区存储...
本文将根据"JVM性能学习笔记思维导图"的主题,详细阐述JVM的主要组成部分,性能调优的关键点以及相关的工具与实践策略。** 1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行...
《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...
这些类型的变量直接存储其值,它们被保存在栈(Stack)内存中。栈是一种快速但空间有限的内存区域,它按照后进先出(LIFO)的原则进行操作。当声明一个基本类型变量并赋值时,系统会在栈中为该变量分配内存,并直接...