java編程 內存_Java編程技術之淺析JVM內存

JVM

JVM->Java Virtual Machine:Java虛擬機,是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

基本認知:

1.JVM是用于運行Java代碼的假象計算機,主要有一套字節碼指令集,一組寄存器,一個棧,一個垃圾回收,堆 和 一個存儲方法域。

2.JVM運行在操作系統之上,與硬件沒有直接的交互。

Java程序執行過程:

1.編譯->源文件由編譯器編譯成字節碼[ByteCode] Java 源文件—->編譯器—->字節碼文件

2.運行->字節碼由java虛擬機解釋運行字節碼文件—->JVM—->機器碼

Java類的加載步驟:

1.加載->主要是完成3個階段的提交:通過類的全限定名來獲取定義類的二進制字節流

將字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構

在內存中生成一個代表這個類的java.lang.Class對象,作為方法區這個類的各種數據的訪問入口。

2.驗證->四個階段的檢驗動作:文件格式驗證

元數據驗證

字節碼驗證

符號引用驗證

3.準備->為類變量(static)分配內存并設置類變量的初始值。

4.解析->將常量池內的符號引用轉為直接的引用

5.初始化->按照static塊和static變量在文件中的出現順序,合并到()方法中。實例變量由()函數賦值。

JVM線程實體:

JVM線程->程序執行過程中的一個線程實體,JVM 允許一個應用并發執行多個線程。

從此,我們應該意識到,在Java中,當提到線程就應該是指JVM線程和Java線程。其中JVM線程指的是Hotspot JVM 后臺運行的系統線程,而且Hotspot JVM 中的 Java 線程與原生操作系統線程有直接的映射關系。

??[注意事項]:

[1].當線程本地存儲、緩沖區分配、同步對象、棧、程序計數器等準備好以后,就會創建一個操作系統原生線程。

[2].Java 線程結束,原生線程隨之被回收。操作系統負責調度所有線程,并把它們分配到任何可用的 CPU 上。

[3].當原生線程初始化完畢,就會調用 Java 線程的 run() 方法。當線程結束時,會釋放原生線程和 Java 線程的所有資源

特別需要知道的是,Hotspot JVM 后臺運行的系統線程主要是:

虛擬機線程->VM thread:等待 JVM 到達安全點操作出現。這些操作必須要在獨立的線程里執行,因為當堆修改無法進行時,線程都需要 JVM 位于安全點。這些操作的類型有:stop-theworld垃圾回收、線程棧 dump、線程暫停、線程偏向鎖(biased locking)解除。

周期性任務線程->負責定時器事件(也就是中斷),用來調度周期性操作的執行

GC線程->支持 JVM 中不同的垃圾回收活動

編譯器線程->在運行時將字節碼動態編譯成本地平臺相關的機器碼

信號分發線程->程接收發送到 JVM 的信號并調用適當的 JVM 方法處理

JVM內存

本文由博客一文多發平臺 OpenWrite 發布!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bzoj1116: [POI2008]CLO

傳送門:http://www.lydsy.com/JudgeOnline/problem.php?id1116 題目大意:Byteotia城市有n個 towns m條雙向roads. 每條 road 連接 兩個不同的 towns ,沒有重復的road. 你要把其中一些road變成單向邊使得:每個town都有且只有一個入度 題解&am…

java排序算法大全_各種排序算法的分析及java實現

排序一直以來都是讓我很頭疼的事,以前上《數據結構》打醬油去了,整個學期下來才勉強能寫出個冒泡排序。由于要找工作了,也知道排序算法的重要性(據說是面試必問的知識點),所以又花了點時間重新研究了一下。排序大的分類可以分為兩…

Cocos2d-x 3.0 簡捷的物理引擎

Cocos2d-x 3.0 開發(九)使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官網Demo 水墨魚的專欄 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 須要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通過Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback,發現它給的 callback 例子中,都是用 IloLPMatrix 這個類放約束條件,在 IloLPMatrix 中, 每個約束條件存儲在 IloRange 中。 使用 IloLPMatrix 的好處是,這個類可以方便查看模型中的求…

6/12 Sprint2 看板和燃盡圖

轉載于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附帶附件_我和我的朋友如何將附帶項目發展為每月$ 17,000的業務

mailto 附帶附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

轉:PHP應用性能優化指南

程序員都喜歡最新的PHP 7,因為它使PHP成為執行最快的腳本語言之一(參考PHP 7 vs HHVM 比較)。但是保持最佳性能不僅需要快速執行代碼,更需要我們知道影響性能的問題點,以及這些問題的解決方案。本文涵蓋了保障PHP應用平…

java 運行異常處理_Java編程異常處理和I/O流

重點:  1.在編寫程序時,要正確地使用捕獲例外和聲明拋出異常的兩種例外處理的方法。2.遇到實際問題時,要根據需要正確使用各種輸入/輸出流,特別是對中文使用適當的字符輸入流。3.正…

反射練習

1.反射 一種計算機處理方式。是程序可以訪問、檢測和修改它本身狀態或行為的一種能力。 新建一個Person類: public class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age age; } pu…

開源 物聯網接入_我們剛剛推出了開源產品。 那么接下來會發生什么呢?

開源 物聯網接入by Victor F. Santos由Victor F.Santos 我們剛剛推出了開源產品。 那么接下來會發生什么呢? (We just launched an open source product. So what happens next?) Last month me and the ninja god Pedro launched GitShowcase, a plug-and-play p…

Class? getClass()

getClass()方法屬于Object的一部分,它將產生對象的類,并且在打印該類時,可以看到該類類型的編碼字符串,前導"["表示這是一個后滿緊隨的類型的數組,而緊隨的"I"表示基本類型int, //: initialization/OptionalTrailingArgrments.java package object;import …

log4j使用說明

1.log4j代碼中修改輸出級別:如: protected final Logger logger LoggerFactory.getLogger(Test.class); 將其轉成實現類,修改輸出級別即可System.out.println(logger.isDebugEnabled()?"debug is true":"debug is false&quo…

java list集合增刪改_Java中集合類list的增刪改查

今天給大家帶來的是Java中list類的使用,java.util 包提供了list類來對線性數據操作List接口是Collection接口的子接口,List有一個重要的實現類--ArrayList類,List中的元素是有序排列的而且可重復,所以被稱為是序列List可以精確的控…

IIS6、IIS7和IIS8各版本的差別

一、寫在前面 目前市面上所用的IIS版本估計都是>6.0的.所以我們主要以下面三個版本進行講解 服務器版本IIS默認版本server20036.0server20087.0server20128.0二、IIS6的請求過程 由圖可知,所有的請求會被服務器中的http.sys組件監聽到,它會根據IIS中的 Metabase 查看基于該 …

Android Studio 插件的使用

1、GsonFormat https://github.com/zzz40500/GsonFormat 2、Android SelectorChapek http://blog.csdn.net/weifei554287925/article/details/41727541

函數式編程基礎_在收件箱中免費學習函數式編程的基礎

函數式編程基礎by Preethi Kasireddy通過Preethi Kasireddy 在收件箱中免費學習函數式編程的基礎 (Learn the fundamentals of functional programming — for free, in your inbox) If you’re a software developer, you’ve probably noticed a growing trend: software ap…

安卓Java虛擬機大小_虛擬機為安卓流暢度背鍋,是因為關系數十萬程序員飯碗?...

導讀:虛擬機相當于應用程序在不同運行環境中的翻譯。說起谷歌安卓系統的“虛擬機”,很多人愛拿它和蘋果iOS做比較,結果,安卓的很多短腿兒都讓虛擬機背了鍋,比如安卓手機運存容量是iPhone的兩到三倍,流暢度卻…

Redis PHP連接操作

安裝 要在PHP程序中使用Redis,首先需要確保 Redis 的PHP驅動程序和 PHP 安裝設置在機器上。可以查看 PHP教程 教你如何在機器上安裝PHP。現在,讓我們來看看一下如何設置 Redis 的PHP驅動程序。 需要從 github 上資料庫: https://github.com/n…

AppCompatActivity實現全屏的問題

前言:我的 Activity 是繼承 BaseActivity , 而 BaseActivity 繼承 AppCompatActivity 。 BaseActivity 的繼承 /*** 應用程序的基類**/ public class BaseActivity extends AppCompatActivity {}HomeActivity 的繼承 public class HomeActivity extends BaseActivit…