`

5_(JAVA基础300集最全教程 学习)代码执行时的内存分配

阅读更多

首先需要说明的是这里说的内存分配,不包含现在热门的栈上分配等方式,只针对最基础的分析。

在JVM的结构中,主要包含:方法区,堆,JAVA栈,本地方法栈,程序计数器。

其中:方法区,堆为各线程共享的区域,JAVA栈,本地方法栈和程序计数器为线程私有。


当类(接口)在经过编译为class文件后,再由类(接口)加载器加载到内存中,当前类(接口)中包含的信息,如:类(接口)的描述,类(接口)中的成员变量,方法等信息都会加载到方法区中,编译期间产生的“常量”和“对象字符串引用”都会加载到方法区的常量池(运行时常量池)中(字符串类型的保存到方法区的String常量池中),当新建某个类的实例时,虚拟机会在当前的堆中分配一块空间做为新建类的保存区域,将栈帧常量池中对新建对象引用的值设定为可以查询到当前堆对象的地址(可以是新建对象在堆中的直接地址,也可能是新建对象在堆中的句柄地址),PC计数器保存当前执行指令地址,当当前执行的方法为本地方法时,PC计数器中则为空。


在这里,可能会经常问道一个问题,String 到底创建了几个的问题:
1.
String aa="abc";

创建了一个字符串"abc",字符串"abc"位于方法区的常量池中;

2.
String aa="abc";
String bb="abc";
创建了一个字符串"abc",bb是指向了第一句中创建的字符串地址,字符串"abc"位于方法区的常量池中;

3.
String bb=new String("abc");

创建了两个字符串,一个是"abc",一个是新建的String对象,"abc"位于方法区,新建的对象在堆中。

4.
String aa="abc";
String bb=new String("abc");
创建了两个字符串,第一句中的"abc"是新建的,第二句中的"abc"是指向第一句中"abc"的地址,然后在新建一个String对象保存到堆中,最后返回的是堆的地址,所以aa和bb是不等的。



分享到:
评论

相关推荐

    深入Java核心_Java内存分配原理精讲

    Java内存分配原理是Java编程中的重要一环,它关乎到程序的性能、稳定性和资源管理。深入理解这一主题,能够帮助开发者编写出更高效、更稳定的代码。在Java中,内存分为堆内存、栈内存、方法区(在Java 8之后被元空间...

    传智播客_张孝祥_java基础教程\1\Java培训教程教学课件.rar

    "Java培训教程教学课件"表明这是一系列用于教学的材料,可能包括PPT、笔记、示例代码等,旨在帮助学习者掌握Java编程的基础知识。 【Java基础知识点详解】 Java是一种广泛使用的面向对象的编程语言,由Sun ...

    Java运行时内存分配

    ### Java运行时内存分配详解 #### 一、引言 Java作为一种广泛使用的编程语言,其内存管理机制一直是开发者关注的重点之一。Java程序在运行时如何分配内存?对象是如何存储的?这些问题不仅对于深入理解Java虚拟机...

    java内存分配情况

    Java内存分配主要涉及五个区域:寄存器、栈、堆、静态域和常量池。在Java编程中,理解这些内存区域的分配规则对于...在编写Java代码时,合理使用栈、堆和静态域,以及正确处理对象引用,都是编写高效、稳定程序的关键。

    CPlus_to_Java_Converter;C++转java工具

    转换器需要将C++的指针操作转换为Java的引用操作,同时处理内存分配和释放的差异,因为Java的垃圾回收机制会自动管理内存。 2. **面向对象的差异**:C++支持多继承,而Java只允许单继承。转换器需要适当地重构多...

    Java内存分配浅析

    Java内存分配是Java编程中非常重要的概念,它涉及到程序运行时的数据存储和管理。Java程序在JVM(Java Virtual Machine,Java虚拟机)上运行,JVM作为一个平台无关的执行环境,负责Java程序的内存管理和执行。理解...

    java内存分配机制详解

    本文旨在详细介绍Java内存分配机制中的几个关键概念:寄存器、栈、堆、静态域、常量池及其在Java运行时环境中的角色与功能。 #### 二、Java内存分配机制概述 Java内存分配主要涉及以下几个区域: 1. **寄存器**:...

    java核心 内存分配问题

    Java 内存分配是理解Java程序性能和...理解Java内存分配对于编写高效、无内存泄漏的代码至关重要,同时也对诊断和解决性能问题有着深远的影响。通过深入了解这些概念,开发者能够更好地设计和优化他们的Java应用程序。

    Java中堆内存与栈内存分配浅析

    ### Java中堆内存与栈内存分配浅析 #### 一、引言 在Java编程语言中,内存管理是一项至关重要的技术。程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的...

    javamemory_JAVA内存监视器_java_

    Java内存监视是优化Java应用程序性能的关键环节,尤其是在处理大规模数据或长时间运行的服务时。Java内存主要分为三个区域:堆(Heap)、栈(Stack)和方法区(Method Area),每个区域都有其特定的作用和管理策略。...

    java程序中的内存分配问题

    Java程序在运行时的内存分配是一个关键的概念,它关乎到程序的性能、稳定性和资源管理。这个主题主要涉及以下几个方面: 1. **JVM内存结构**:Java虚拟机(JVM)将内存划分为几个区域,包括堆(Heap)、栈(Stack)...

    张孝祥_Java基础1_Java开发前奏

    Java的基础包括JDK(Java Development Kit),它是开发Java程序的核心工具集。JDK包含了Javac编译器,用于将Java源代码转换为字节码,以及一系列基础核心类库,使得开发者能够构建复杂的程序。此外,Java根据不同的...

    Java内存分配原理精讲

    本文旨在深入探讨Java内存分配的基本原理及其在不同内存区域的具体表现,帮助读者更好地理解Java程序运行时内存的使用情况。 #### 二、Java内存区域概述 Java程序在运行时会根据不同的数据类型和生命周期将其分配...

    内存分配源代码MemoryAllocation.rar

    内存分配是计算机操作系统中的核心功能之一,它...这个源代码可能是对以上某个或多个方面进行的示例演示或实验,帮助学习者理解内存分配的原理和实践。深入研究这个源码,将有助于提升对Java内存管理的理解和应用能力。

    java内存分配演示程序

    "java内存分配演示程序"是一个用于理解Java内存模型和内存分配过程的项目。在这个课程设计中,你将深入学习Java如何在运行时为对象分配内存,以及垃圾收集器如何回收不再使用的内存。以下是关于Java内存分配的一些...

    javamesh_java.rar_GRID java_java 数组_javame_javamesh_java.rar_网格

    “java_java”和“数组”标签提示了我们这个项目可能涉及到了Java语言的基础知识,特别是数组的使用。在Java中,数组是一种存储固定数量相同类型元素的数据结构。数组在网格计算中起着关键作用,因为它们可以用来...

    java内存对象分配过程研究

    本文将基于Java虚拟机(JVM)的内存模型,详细探讨对象在Java中的内存分配过程。 #### 二、Java虚拟机内存区域 Java虚拟机(JVM)是Java程序运行的基础平台,其内部有一套完整的内存管理机制。根据JVM规范,JVM的内存...

    精选_基于JAVA实现的操作系统模拟内存分配_源码打包

    在Java中,内存分配主要涉及堆内存(Heap)和栈内存(Stack),而这里的“基于JAVA实现的操作系统模拟内存分配”可能是指一个项目或教程,旨在通过编程实践帮助开发者理解内存管理的基本原理。 在Java中,内存分配...

    操作系统 内存分配代码

    内存分配是操作系统中的一项基础但复杂的功能,它涉及到程序的执行效率、系统稳定性以及内存资源的有效利用。本篇将深入探讨操作系统如何进行内存分配,以及相关的代码实现。 内存分配主要分为两个层次:用户空间...

    java_jiankong.rar_java_java程序

    描述中的"JAVA程序实现监视-JAVA程序内存使用情况"明确了我们的目标,即学习如何通过编写Java代码来监控程序在运行时的内存消耗。这种监视通常涉及分析堆内存、栈内存以及方法区等各个内存区域的状态。 Java提供了...

Global site tag (gtag.js) - Google Analytics