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屬性或者方法的

相關文章
相關標籤/搜索