java的对象内存分布

1.变量是保存在栈里的 保存的是数据不是引用地址  所以一个变量是一个值, 一 一对应 

int a = 1;

int b = a;

b = 2;

//a结果为1,b结果为2  a并不会改变

2.对象的数据是保存在堆里面的 而引用地址是保存在栈里的  调用流程是先到栈获取引用地址,再通过引用地址再堆里找到对应的数据, 所以当某一个对象的值改变 其他引用该对象的值也会改变

时间: 2024-10-07 06:41:16

java的对象内存分布的相关文章

C++对象内存分布(3) - 菱形继承(virtual)

1.前言 本篇文章的所有代码例子,如果是windows上编译运行,则使用的是visual studio 2013.如果是RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)上编译运行,则其gcc版本为4.4.7,如下所示: [[email protected] ~]# gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) 2.菱形继承类的内存分布 本篇文章主要讨论的是虚继承(virtual)下的内存分

C++对象内存分布(2) - 菱形继承(non virtual)

1.前言 本篇文章的所有代码例子,如果是windows上编译运行,则使用的是visual studio 2013.如果是RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)上编译运行,则其gcc版本为4.4.7,如下所示: [[email protected] ~]# gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) 2.菱形继承类的内存分布 2.1.类的结构 菱形继承 - 重复继承 2.2.实现

C++对象内存分布(1) - 私有虚函数

1.前言 本篇文章的所有代码例子,如果是windows上编译运行,则使用的是visual studio 2013.如果是RHEL6.5平台(linux kernal: 2.6.32-431.el6.i686)上编译运行,则其gcc版本为4.4.7,如下所示: [[email protected] ~]# gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) 2.非公有虚函数 在开始探讨对象中内存的具体分布之前,先来看下C++中虚函数的一

类对象内存分布

================================================================================================ 如何计算类对象占用的字节数? 一个空类的话1个字节.这是为了保证n个连续空类声明时,变量地址有偏移,防止变量覆盖. 非空类的话用关键字sizeof计算.如果手工计算就相当麻烦,光padding就一堆规则了.而且有些额外信息比如虚函数(多个虚函数也只产生一个vptr指针)等等.一个类成员 ,当有虚函数时,有

对象内存分布

对象在内存中分为三个区域:1 对象头(Header) 2 实例数据(Instance Date) 3 对齐填充(Padding) 1 对象头: 1) 存储自身运行时的数据,如Hascode ,GC 分代年龄,锁状态标记,线程持有锁,偏向线程id,偏向时间戳.数据存放在32bit 和64bit 机中分别用32bit和64bit来存储. 2)  对象头的另一部分是类型指针.是对象指向他的类元数据的指针.虚拟机通过这个指针来确认这个对象是哪个类的实例.注:不是所有的对象都有这个记录, 2 实例数据:

Java 虚拟机的内存分布

Java虚拟机内存分为五个区域:方法区,堆,虚拟机栈,本地方法栈,程序计数器.其中方法区和堆是java虚拟机共享的内存区域,虚拟机栈,本地方法栈,程序计数器是线程私有的. 程序计数器(Program Counter Register): 当前线程执行字节码的行号指示器.通过改变这个指示器的值来选取下一条需要执行的字节码指令.这个内存区域是Java虚拟机唯一一个没有定义OutOfMemeryError情况的区域. Java虚拟机栈(Java Visual Machine Stacks): 虚拟机栈

java实例化对象内存图/代码

实例化        new : 分四步            1 把相对用的类文件加载到静态代码段            2 调用构造方法,在栈内存开辟空间(方法只要调用,就会在栈内存开辟空间)            3 用加载进来的类,去堆内存开辟空间,并把自身的代码复制到堆内存里面,再运行构造方法,把构造方法里面的值赋值给堆内存            4 把堆内存的内存地址 赋值给前面声明的变量 代码 : public class Shi_Li_Hua{     int i;//成员变量 

[转载]多重继承及虚继承中对象内存的分布

粘过来的效果还不错:) 本位通过不断地完善讲解多重继承及虚继承中对象内存的分布. 读的时候不要着急,第一遍会有些晕,第二遍就会好很多. 能帮助加深对多重继承及虚继承对象内存的分布情况. 多重继承及虚继承中对象内存的分布     这篇文章主要讲解G++编译器中虚继承的对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别.虚函数表的格式等一些大部分C++程序员都似是而非的概念. 本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识.

Java虚拟机之内存简介

本文主要介绍Java虚拟机的内存分布以及对象的创建过程. 一.Java虚拟机的内存分布 文章开始前读者需要了解Java虚拟机的运行时数据区是怎样划分的.如下图所示: 1.程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,所以在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令.因此,为