Java中this、static关键字的内存图解

  Java中的关键字有不少,abstract  default  goto*  null  switch  boolean  do  if  package  nchronzed  break  double  implements  private  this  byte  else  import  protected  throw  throws  case  extends  instanceof  public  transient  catch  false  int  return  true  char  final  interface  short  try  class  finally  long  static  void  const*  float  native  strictfp  volatile  continue  for  new  super  while  assert  enum ( 注:带*好的关键字如今已不使用。)java

Java中goto 和 const 没有任何意义。assert是在JDK1.4以后增长进来的,enum是在JDK1.5以后增长进来的。this

java中的两个保留关键组:spa

 const n. 常量,常数   用于修改字段或局部变量的声明。它指定字段或局部变量的是常数,不能被修改。翻译

 goto  vi. 转到   指定跳转标签,找到标签后,程序将处理从下一行开始的命令。code

先说明一下Java中重中之重的几个概念吧!JVM、Java编译器、Java解释器视频

注意:对象

一、JVM负责运行字节码:JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,而后由解释器执行。blog

二、JVM解释执行字节码文件就是JVM操做Java解释器进行解释执行字节码文件的过程。接口

再说一下程序运行的通常步骤:内存

(1)Java编译器将.java文件编译成 .class文件

(2)JVM将字节码文件交给解释器,翻译成对应的机器码,由解释器执行

Java解释器:是JVM的一部分。Java解释器用来解释执行Java编译器编译后的程序。java.exe能够简单当作是Java解释器。

Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的“机器语言”。javac.exe能够简单当作是Java编译器。

 JVM(够运行Java字节码(Java bytecode)的虚拟机)中把内存分为直接内存、方法区、Java栈、Java堆、本地方法栈、PC寄存器等。

       直接内存:就是原始的内存区

       方法区:用于存放类、接口的元数据信息,加载进来的字节码数据都存储在方法区

       Java栈:执行引擎运行字节码时的运行时内存区,采用栈帧的形式保存每一个方法的调用运行数据

       本地方法栈:执行引擎调用本地方法时的运行时内存区

       Java堆:运行时数据区,各类对象通常都存储在堆上

       PC寄存器:功能如同CPU中的PC寄存器,指示要执行的字节码指令。

       JVM的功能模块主要包括类加载器、执行引擎和垃圾回收系统

1、this关键字在内存中的图解

this关键字其实自己没有什么难度的,可是在工做中,其实自己也用不到这些,可是这些最基础的东西每每才是最具备生命力的,要想长远发展,这些基础的东西必定是烂熟于心的,对问题的深刻理解,有很大好处,仍是传智播客的视频中讲到的this关键字内存图解:

这里面须要注意的是,在程序运行的时候,Java编译器将java文件编译成class文件,JVM操做Java解释器执行字节码文件

具体来讲就是首先会在方法区建立class文件区(这里还有静态区的初始化),以后main方法进栈,在栈中进行对象的建立,在堆中进行实例化,栈中的对象经过内存中的位置标识指向堆中的new出来的对象的实例,对象中的方法的执行在栈中,执行完以后就会销毁!

2、static关键字的内存图解

这里须要注意的是相同对象实际上是共用一个静态区中的静态static属性或者方法的

相关文章
相关标签/搜索