首页 > 技术文章 > Java new关键字做了什么

hackerstd 2020-04-07 15:06 原文

在了解Java new关键字之前,要先了解内存区域的几点知识。

运行时内存区域

  1. 程序计数器
  • 解释:一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个指数器来完成。
  • 线程私有:由于Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间来完成的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的命令。因此,为了线程切换之后能够恢复到正常的执行位置,每个线程都需要一个独立的程序计数器。
  1. Java虚拟机栈(在大多数情况下,“栈”指的就是这个)
  • 解释:虚拟机栈描述的是Java方法执行的线程内存模型:每一个方法被执行的时候,JVM都会同步创建一个栈帧(用于支持虚拟机进行方法调用和方法执行的数据结构),用于储存局部变量表,操作数帧、动态连接、方法出口等信息。一个方法从被调用到执行完毕的过程,都是一个栈桢入栈和出栈的过程。
  1. 本地方法栈
  • 略。
  • 唯一目的:存放对象实例。
  • 线程共享。
  1. 方法区(特殊的堆)
  • 解释:用于存放已被虚拟机加载的类型信息、常量、静态变量、运行时常量池、即时编译器编译后的代码缓存数据。
  • 线程共享。
  • 运行时常量池:用于存放编译期生成的各种字面量和符号引用。

new关键字所做的事

  1. 在堆中开辟一块内存。
  2. 调用该类的构造方法实例化对象。
  3. 返回堆内存的地址。
    一般情况下,我们会声明一个该类的引用,并将new返回的地址赋给引用。引用即可代表对象了,

推荐阅读