程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 深刻解析java虛擬機

深刻解析java虛擬機

編輯:關於JAVA

深刻解析java虛擬機。本站提示廣大學習愛好者:(深刻解析java虛擬機)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析java虛擬機正文


java虛擬機是甚麼

“java虛擬機”能夠指以下三種器械:
1)、籠統標准;
2)、一個詳細的完成;
3)、一個運轉中的虛擬機實例;

java虛擬機性命周期

啟動
當啟動一個java法式時,一個虛擬機實例出生。
虛擬機實例經由過程挪用某個初始類的public static void main(String[] args)辦法來運轉一個java法式。
任何具有如許一個main辦法的類都可以作為java法式運轉的終點,所以必需要告知虛擬機初始類的稱號,全部法式將從它的main辦法開端運轉。

滅亡
初始類的main辦法作為法式初始線程的終點,任何其他線程都是由初始線程啟動。
java虛擬機外部有兩種線程:守護線程和非守護線程。
守護線程,平日是虛擬機應用的線程,如履行渣滓搜集。java法式也能夠把創立的線程標志為守護線程。
非守護線程,java中的初始線程,就是開端於main辦法的線程長短守護線程。
只需法式中有非守護線程在運轉,那末java法式也在持續運轉(虛擬機依然存活),當法式中一切的非守護線程都終止時,虛擬機實例主動加入。
法式自己也能夠經由過程Runtime類或System類的exit()辦法加入。

java虛擬機系統構造

類裝載子體系
1)、擔任查找並裝載類型,分紅裝載、銜接和初始化,在java類型性命周期中有具體解釋;
2)、有兩品種裝載器:啟動類裝載器和用戶自界說類裝載器;
用戶自界說類裝載器必需派生自java.lang.ClassLoader類。

運轉時數據區

辦法區
被裝載類型的信息存儲在辦法區中,具體以下:
根本信息
1)、類型的全限制名;
2)、類型的直接超類的全限制名;
3)、類型是類類型照樣接口類型;
4)、類型的拜訪潤飾符;
5)、直接超接口的全限制名;

其他信息
1)、類型的常量池;
2)、字段信息;
3)、辦法信息;
4)、除常量認為的一切靜態變量;
5)、一個到ClassLoader類的援用;
6)、一個到Class類的援用;


1)、運轉時創立的一切類實例和數組都放在堆中;
2)、一個java虛擬機實例只存在一個堆空間,是以虛擬機中的一切線程都同享這個堆;
3)、一個java法式獨有一個java虛擬機實例,是以每一個java法式都有他本身的堆空間;

java棧

1)、每啟動一個新線程時,java虛擬機都邑為他分派一個java棧;
2)、java棧以幀為單元保留線程的運轉狀況;
3)、java虛擬機對java棧只履行兩種操作:壓棧和出棧;
4)、壓棧:每當線程挪用一個java辦法時,虛擬機都邑在該線程的java棧中壓入一個新幀。應用這個幀來存儲參數、部分變量、中央運算成果等;
5)、出棧:當java辦法經由過程return正常前往,或經由過程拋出異常中斷,虛擬機都邑將以後幀彈出java棧然後釋放失落;
6)、棧數據是線程公有的,所以不須要斟酌多線程情形下棧數據的拜訪同步成績;

棧幀
1)、棧幀由三部門構成:部分變量區、操作數區和棧數據區;

PC存放器
1)、關於運轉中的java法式,每一個線程都有本身的pc存放器;
2)、線程啟動時創立;
3)、當線程履行某個java辦法時,PC存放器的內容老是下一條將被履行指令的地址。

當地辦法棧
1)、任何當地辦法接口都邑應用當地辦法棧;

履行引擎
1)、履行引擎是java虛擬機完成的焦點;
2)、“履行引擎”可以有三種懂得:
  a)、一個是籠統的標准;
      b)、一個是詳細的完成;
      c)、一個是正在運轉的實例;
3)、履行引擎的行動應用指令集來界說。關於每條指令,標准都劃定了履行該指令時應當處置甚麼,假如處置不做劃定;
待細化。。。

ontent) fopen.close() def savefile(evt): filepath = text_filename.GetValue() filecontents = text_contents.GetValue() fopen = file(filepath,'w') fopen.write(filecontents) fopen.close() app = wx.App() #創立Frame win = wx.Frame(None,title='NotePad',size=(440,320)) #創立Panel panel = wx.Panel(win) #創立open,save按鈕 bt_open = wx.Button(panel,label='open') bt_open.Bind(wx.EVT_BUTTON,openfile) #添加open按鈕事宜綁定,openfile()函數處置 bt_save = wx.Button(panel,label='save') bt_save.Bind(wx.EVT_BUTTON,savefile) #添加save按鈕事宜綁定,savefile()函數處置 #創立文本框,文本域 text_filename = wx.TextCtrl(panel) text_contents = wx.TextCtrl(panel,style=wx.TE_MULTILINE|wx.HSCROLL) #添加結構治理器 bsizer_top = wx.BoxSizer() bsizer_top.Add(text_filename,proportion=1,flag=wx.EXPAND,border=5) bsizer_top.Add(bt_open,proportion=0,flag=wx.LEFT,border=5) bsizer_top.Add(bt_save,proportion=0,flag=wx.LEFT,border=5) bsizer_all = wx.BoxSizer(wx.VERTICAL) bsizer_all.Add(bsizer_top,proportion=0,flag=wx.EXPAND|wx.LEFT,border=5) bsizer_all.Add(text_contents,proportion=1,flag=wx.EXPAND|wx.ALL,border=5) panel.SetSizer(bsizer_all) win.Show() app.MainLoop() 47,0-1 Bot ####################################################### # 翻開,保留功效根本完成,但還存在許多bug。 # # 怎樣也算本身的第二個Python小法式吧!! # ###########################################################################

(六)ListCtrl列表控件的應用示例
ListCtrl這個控件比擬壯大,是我比擬愛好應用的控件之一。
上面是list_report.py中供給的簡略用法:

import wx
import sys, glob, random
import data

class DemoFrame(wx.Frame):
  def __init__(self):
    wx.Frame.__init__(self, None, -1,
             "wx.ListCtrl in wx.LC_REPORT mode",
             size=(600,400))

    il = wx.ImageList(16,16, True)
    for name in glob.glob("smicon??.png"):
      bmp = wx.Bitmap(name, wx.BITMAP_TYPE_PNG)
      il_max = il.Add(bmp)
    self.list = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
    self.list.AssignImageList(il, wx.IMAGE_LIST_SMALL)

    # Add some columns
    for col, text in enumerate(data.columns):
      self.list.InsertColumn(col, text)

    # add the rows
    for item in data.rows:
      index = self.list.InsertStringItem(sys.maxint, item[0])
      for col, text in enumerate(item[1:]):
        self.list.SetStringItem(index, col+1, text)

      # give each item a random image
      img = random.randint(0, il_max)
      self.list.SetItemImage(index, img, img)
        
    # set the width of the columns in various ways
    self.list.SetColumnWidth(0, 120)
    self.list.SetColumnWidth(1, wx.LIST_AUTOSIZE)
    self.list.SetColumnWidth(2, wx.LIST_AUTOSIZE)
    self.list.SetColumnWidth(3, wx.LIST_AUTOSIZE_USEHEADER)


app = wx.PySimpleApp()
frame = DemoFrame()
frame.Show()
app.MainLoop()

 

若何獲得選中的項目?
 最經常使用的辦法就是獲得選中的第一項:GetFirstSelected(),這個函數前往一個int,即ListCtrl中的項(Item)的ID。

 還有一個辦法是:GetNextSelected(itemid),獲得指定的itemid以後的第一個被選中的項,異樣也是前往itemid。

 經由過程這兩個辦法,我們便可以遍歷一切選中的項了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved