Java 程序运行过程中的内存分析

作为 java 程序员,都应该知道 Java 程序运行在 JVM(Java Virtual Machine,Java 虚拟机)上,可以把 JVM 理解成 Java 程序和操作系统之间的桥梁,JVM 实现了 Java 的平台无关性,由此可见 JVM 的重要性。所以在学习 Java 内存分配原理的时候一定要牢记这一切都是在 JVM 中进行的,JVM 是内存分配原理的基础与前提。


Java 程序在运行的过程中涉及到以下内存区域:

存放局部变量,可保存基本数据类型的值,还可以保存引用类型变量,即对象的引用(也可以理解为对象的指针)


存放动态产生的数据,比如,new 出来的对象、数组等。创建出来的对象只包含各自的属性(成员变量)并不包括方法。因为同一个类所实例化的对象,非静态的成员变量,存储在每个对象各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就需要把方法复制一次。


数据区

存放字符串常量和静态成员变量。本区存在一个常量池的概念,JVM 为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。对于字符串常量,有一个字符串池来存储字符串,并且对字符串池进行了优化,具有相同字符序列的字符串只能存储一次。


代码区

也可称之为方法区,该区存放已被加载的类的信息、常量、静态变量、即时编译器编译后的代码。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

typeof关键字的作用

一、typeof详解: 前言:     typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。(其实这和C++的auto关键字和可以...

34550
来自专栏Golang语言社区

golang的{}初始化

之前说到Golang中某些类型可以赋值nil, 某些类型不能赋值nil. 不能赋值nil都是initialized value不为nil的类型, 例如: boo...

39690
来自专栏Golang语言社区

golang的{}初始化

之前说到Golang中某些类型可以赋值nil, 某些类型不能赋值nil. 不能赋值nil都是initialized value不为nil的类型, 例如: boo...

35070
来自专栏计算机视觉

Python 函数使用记录,join函数和os.path.join用法

1.join()函数 语法:‘sep’.join(seq) 参数说明: sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典等 上面的语法即:...

471120
来自专栏用户画像

正则表达式匹配 整数和正整数

?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?

9620
来自专栏遊俠扎彪

C++中的字符数组、字符串、字符指针的一些笔记

1、sizeof会计算实际内存空间,strlen会计算C风格的字符串的实际字符数(不包括\0)。

200100
来自专栏xingoo, 一个梦想做发明家的程序员

虚函数

虚函数 代码如下定义: // test1107.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <i...

22850
来自专栏海天一树

小朋友学Python(28):join方法和eval方法

一、join方法 语法: str.join(sequence) 功能: join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串 参数: seq...

296100
来自专栏Vamei实验室

Python基础04 运算

Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容,高级应用暂时不介绍) 数学运算 >>>print 1+9   ...

22480
来自专栏猿人谷

静态成员函数和非静态成员函数的区别?

一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。 它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针t...

23590

扫码关注云+社区

领取腾讯云代金券