关闭

Java创建对象过程中,内存的分配

标签: java对象内存
773人阅读 评论(0) 收藏 举报
分类:

对象的内存分配

我们都知道,要使用类,就一定要为其创建对象。那么,在创建对象过程中,内存是如何分配的呢?
类的本质是一种引用数据类型,这与数组是一样的。比如本文提供的简单例子程序中的Person类,它有两个属性,name和age,而属性是需要内存来存储的。我们以person对象来讲解。执行Person person=null; 时,Java系统会在栈内存开辟一个空间给对象person,程序继续向下执行到person=new Person(); 时,Java系统会在堆内存开辟空间保存对象person属性(注意是属性)的内容。person变量本身存储的只是一个地址值,没有存储任何实际数据,但是它指向了Person类。所以当访问person对象的属性和方法时,实际上访问的是person所引用对象的属性和方法。

堆内存中的变量可以有多个引用,但是它们实际引用的是同一个类,如果对其中一个对象进行修改,那么其他对象的属性也会发生变化,因为它们指向同一个类。
可以这么说,对象的名称保存在栈内存中,而对象的属性保存在以new为关键字才能开辟的堆内存中。在Java中,当为类创建一个对象时,编译器会为对象的各个类型的成员变量进行初始化,无论是基本数据类型还是引用数据类型。
注意:对象在使用前一定要实例化,如果对象没有实例化而直接使用,那么中编译时就会出现空指针异常
本文例程代码:

public class hello {

    public static void main(String[] args) {
        Person person=null;
        person=new Person();
        person.say();
    }


}
class Person{
    String name="Ters";
    int age=18;
    public void say() {
        System.out.println(name+" "+age);
    }
}

匿名对象

匿名对象是指没有栈空间的对象,即没有明确的名字给出对象。匿名对象使用的是堆内存,是通过关键字new进行开辟,因为没有对应的栈内存空间引用,所以对象只能使用一次。

new Person().say();
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

关于创建String对象过程的内存分配

关于创建String对象过程的内存分配 常量池(Constant Pool):指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。JVM虚拟机为每个被装载的类型维护一个常量池。...
  • xiabing082
  • xiabing082
  • 2015-11-10 14:09
  • 2639

Java对象创建过程和内存结构分析

JAVA内存分配和管理是JAVA的核心技术之一,在看了尚硅谷宋红康老师讲解的JAVA内存知识之后,结合《深入理解JVM这本书》对自己所学的知识进行简单的总结,写了这篇日志。 1.JAVA内存分区 ...
  • u010001192
  • u010001192
  • 2015-05-03 16:02
  • 2642

Java关键字new-----对象的内存分配原理

一、关键字new概述         "new"可以说是Java开发者最常用的关键字,我们使用new创建对象,使用new并通过类加载器来实例化任何我们需要的东西,但你是否深入了解过new在编译的瞬间都...
  • ljheee
  • ljheee
  • 2016-08-17 23:53
  • 7025

Java创建对象过程中,内存的分配

对象的内存分配 我们都知道,要使用类,就一定要为其创建对象。那么,在创建对象过程中,内存是如何分配的呢? 类的本质是一种引用数据类型,这与数组是一样的。比如本文提供的简单例子程序中的Person类...
  • h082602
  • h082602
  • 2017-05-24 16:56
  • 1066

浅析Java内存和创建对象时成员的初始化过程

Java虚拟机在运行需要在内存中开辟空间,在空间中进一步分区,每个分区都有其对数据的处理特点, 内存的划分: 1、寄存器: CPU在处理,存储速度非常快,程序不可控制 2、本地方法区:和所在系统...
  • xiaoshengfdyh
  • xiaoshengfdyh
  • 2015-10-08 20:28
  • 1271

Dalvik虚拟机为新创建对象分配内存的过程分析

在前面一文中,我们分析了Dalvik虚拟机创建Java堆的过程。有了Java堆之后,Dalvik虚拟机就可以在上面为对象分配内存了。在Java堆为对象分配内存需要解决内存碎片和内存不足两个问题。要解决...
  • Luoshengyang
  • Luoshengyang
  • 2014-12-08 01:00
  • 19239

ART运行时为新创建对象分配内存的过程分析

ART运行时和Dalvik虚拟机一样,在堆上为对象分配内存时都要解决内存碎片和内存不足问题。内存碎片问题可以使用dlmalloc技术解决。内存不足问题则通过垃圾回收和在允许范围内增长堆大小解决。由于垃...
  • haoge921026
  • haoge921026
  • 2016-10-14 17:09
  • 473

ART运行时Compacting GC为新创建对象分配内存的过程分析

在引进Compacting GC后,ART运行时优化了堆内存分配过程。最显著特点是为每个ART运行时线程增加局部分配缓冲区(Thead Local Allocation Buffer)和在OOM前进行...
  • Luoshengyang
  • Luoshengyang
  • 2015-04-13 00:57
  • 21721

Dalvik虚拟机为新创建对象分配内存的过程分析

在前面一文中,我们分析了Dalvik虚拟机创建Java堆的过程。有了Java堆之后,Dalvik虚拟机就可以在上面为对象分配内存了。在Java堆为对象分配内存需要解决内存碎片和内存不足两个问题。要解决...
  • haoge921026
  • haoge921026
  • 2016-10-14 16:51
  • 546

ART运行时Compacting GC为新创建对象分配内存的过程分析

在引进Compacting GC后,ART运行时优化了堆内存分配过程。最显著特点是为每个ART运行时线程增加局部分配缓冲区(Thead Local Allocation Buffer)和在OOM前进行...
  • haoge921026
  • haoge921026
  • 2016-10-14 17:14
  • 608
    个人资料
    • 访问:122910次
    • 积分:4016
    • 等级:
    • 排名:第9013名
    • 原创:290篇
    • 转载:4篇
    • 译文:0篇
    • 评论:3条
    博客专栏
    最新评论