国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JVM基礎:深入學習JVM堆與JVM棧

開發 后端
本文向大家描述一下JVM基礎中JVM堆和JVM棧的概念,JVM堆和JVM棧是程序運行的關鍵,很有必要把他們的關系說清楚,JVM棧是運行時的單位,而JVM堆是存儲的單位。

JVM棧解決程序的運行問題,即程序如何執行,或者說如何處理數據;JVM堆解決的是數據存儲的問題,即數據怎么放、放在哪兒,另外JVM堆中存的是對象。JVM棧中存的是基本數據類型和JVM堆中對象的引用。

JVM基礎概念:JVM堆與JVM棧

數據類型

  Java虛擬機中,數據類型可以分為兩類:基本類型和引用類型。基本類型的變量保存原始值,即:他代表的值就是數值本身;而引用類型的變量保存引用值。“引用值”代表了某個對象的引用,而不是對象本身,對象本身存放在這個引用值所表示的地址的位置。

  基本類型包括:byte,short,int,long,char,float,double,Boolean,returnAddress

  引用類型包括:類類型,接口類型和數組。

JVM堆與JVM棧

  JVM堆和JVM棧是程序運行的關鍵,很有必要把他們的關系說清楚。

JVM堆和JVM棧


  JVM棧是運行時的單位,而JVM堆是存儲的單位。

  JVM棧解決程序的運行問題,即程序如何執行,或者說如何處理數據;JVM堆解決的是數據存儲的問題,即數據怎么放、放在哪兒。

  在Java中一個線程就會相應有一個線程JVM棧與之對應,這點很容易理解,因為不同的線程執行邏輯有所不同,因此需要一個獨立的線程JVM棧。而JVM堆則是所有線程共享的。JVM棧因為是運行單位,因此里面存儲的信息都是跟當前線程(或程序)相關信息的。包括局部變量、程序運行狀態、方法返回值等等;而JVM堆只負責存儲對象信息。#p#

為什么要把JVM堆和JVM棧區分出來呢?JVM棧中不是也可以存儲數據嗎?

  ***,從軟件設計的角度看,JVM棧代表了處理邏輯,而JVM堆代表了數據。這樣分開,使得處理邏輯更為清晰。分而治之的思想。這種隔離、模塊化的思想在軟件設計的方方面面都有體現。

  第二,JVM堆與JVM棧的分離,使得JVM堆中的內容可以被多個JVM棧共享(也可以理解為多個線程訪問同一個對象)。這種共享的收益是很多的。一方面這種共享提供了一種有效的數據交互方式(如:共享內存),另一方面,JVM堆中的共享常量和緩存可以被所有JVM棧訪問,節省了空間。

  第三,JVM棧因為運行時的需要,比如保存系統運行的上下文,需要進行地址段的劃分。由于JVM棧只能向上增長,因此就會限制住JVM棧存儲內容的能力。而JVM堆不同,JVM堆中的對象是可以根據需要動態增長的,因此JVM棧和JVM堆的拆分,使得動態增長成為可能,相應JVM棧中只需記錄JVM堆中的一個地址即可。

  第四,面向對象就是JVM堆和JVM棧的***結合。其實,面向對象方式的程序與以前結構化的程序在執行上沒有任何區別。但是,面向對象的引入,使得對待問題的思考方式發生了改變,而更接近于自然方式的思考。當我們把對象拆開,你會發現,對象的屬性其實就是數據,存放在JVM堆中;而對象的行為(方法),就是運行邏輯,放在JVM棧中。我們在編寫對象的時候,其實即編寫了數據結構,也編寫的處理數據的邏輯。不得不承認,面向對象的設計,確實很美。

  在Java中,Main函數就是JVM棧的起始點,也是程序的起始點。

  程序要運行總是有一個起點的。同C語言一樣,java中的Main就是那個起點。無論什么java程序,找到main就找到了程序執行的入口:)

JVM堆中存什么?JVM棧中存什么?

  JVM堆中存的是對象。JVM棧中存的是基本數據類型和JVM堆中對象的引用。一個對象的大小是不可估計的,或者說是可以動態變化的,但是在JVM棧中,一個對象只對應了一個4btye的引用(JVM堆JVM棧分離的好處:))。

  為什么不把基本類型放JVM堆中呢?因為其占用的空間一般是1~8個字節——需要空間比較少,而且因為是基本類型,所以不會出現動態增長的情況——長度固定,因此JVM棧中存儲就夠了,如果把他存在JVM堆中是沒有什么意義的(還會浪費空間,后面說明)。可以這么說,基本類型和對象的引用都是存放在JVM棧中,而且都是幾個字節的一個數,因此在程序運行時,他們的處理方式是統一的。但是基本類型、對象引用和對象本身就有所區別了,因為一個是JVM棧中的數據一個是JVM堆中的數據。最常見的一個問題就是,Java中參數傳遞時的問題。

Java中的參數傳遞時傳值呢?還是傳引用?

  要說明這個問題,先要明確兩點:

  1.不要試圖與C進行類比,Java中沒有指針的概念

  2.程序運行永遠都是在JVM棧中進行的,因而參數傳遞時,只存在傳遞基本類型和對象引用的問題。不會直接傳對象本身。

  明確以上兩點后。Java在方法調用傳遞參數時,因為沒有指針,所以它都是進行傳值調用(這點可以參考C的傳值調用)。因此,很多書里面都說Java是進行傳值調用,這點沒有問題,而且也簡化的C中復雜性。

  但是傳引用的錯覺是如何造成的呢?在運行JVM棧中,基本類型和引用的處理是一樣的,都是傳值,所以,如果是傳引用的方法調用,也同時可以理解為“傳引用值”的傳值調用,即引用的處理跟基本類型是完全一樣的。但是當進入被調用方法時,被傳遞的這個引用的值,被程序解釋(或者查找)到JVM堆中的對象,這個時候才對應到真正的對象。如果此時進行修改,修改的是引用對應的對象,而不是引用本身,即:修改的是JVM堆中的數據。所以這個修改是可以保持的了。

  對象,從某種意義上說,是由基本類型組成的。可以把一個對象看作為一棵樹,對象的屬性如果還是對象,則還是一顆樹(即非葉子節點),基本類型則為樹的葉子節點。程序參數傳遞時,被傳遞的值本身都是不能進行修改的,但是,如果這個值是一個非葉子節點(即一個對象引用),則可以修改這個節點下面的所有內容。

  JVM堆和JVM棧中,JVM棧是程序運行最根本的東西。程序運行可以沒有JVM堆,但是不能沒有JVM棧。而JVM堆是為JVM棧進行數據存儲服務,說白了JVM堆就是一塊共享的內存。不過,正是因為JVM堆和JVM棧的分離的思想,才使得Java的垃圾回收成為可能。

  Java中,JVM棧的大小通過-Xss來設置,當JVM棧中存儲數據比較多時,需要適當調大這個值,否則會出現java.lang.StackOverflowError異常。常見的出現這個異常的是無法返回的遞歸,因為此時JVM棧中保存的信息都是方法返回的記錄點。

【編輯推薦】

  1. 調用tomcat設置JVM參數
  2. JVM安裝與Tomcat配置具體步驟
  3. 巧解Tomcat中JVM內存溢出問題
  4. 新一代JVM垃圾回收算法出爐
  5. 揭露JDK,JRE,JVM三者不為人知的隱情

 

責任編輯:佚名 來源: java.chinaitlab.com
相關推薦

2009-11-25 11:08:28

JVM基礎概念數據類型堆與棧

2017-02-07 09:54:43

JVMJavaClass

2010-09-17 14:17:05

JVM內存設置

2012-01-11 13:04:40

JavaJVM

2018-11-01 10:34:37

JVM內存配置

2020-05-27 21:13:27

JavaJVM內存

2019-02-26 14:33:22

JVM內存虛擬機

2012-01-11 10:45:57

JavaJVM

2012-01-11 11:28:00

JavaJVM

2011-08-24 09:30:29

JavaJVM

2010-09-26 16:55:31

JVM學習筆記

2010-09-27 09:01:26

JVM分代垃圾回收

2009-07-10 16:17:41

JVM 1.6

2011-07-05 10:39:55

JVM

2020-04-15 21:43:22

JVMJavaVMware

2019-10-10 16:25:02

JVM數據多線程

2023-11-05 12:05:35

JVM內存

2010-09-27 09:31:42

JVM內存結構

2017-09-20 08:48:09

JVM內存結構

2010-09-25 12:54:24

JVM內存
點贊
收藏

51CTO技術棧公眾號

亚洲日本欧美天堂| 成人激情春色网| 黄色软件在线观看| www成人在线观看| 在线一区高清| 日韩高清中文字幕一区| 国产女主播一区二区| 久久国产精品亚洲人一区二区三区| 久久久精品久久久| 韩国成人在线| 日韩精品福利在线| aa级大片免费在线观看| 欧美一级黄色片| 一级毛片视频在线| 欧美性做爰猛烈叫床潮| 你懂的视频在线播放| 一道本成人在线| 日韩一二三四| 欧美影视一区在线| 天堂аⅴ在线地址8| 欧美视频在线一区二区三区 | 欧美日韩伦理| 欧美一级片在线播放| 国产成人精品亚洲线观看| 久久综合亚洲社区| 一区二区在线免费播放| 久久久久久久一区二区| 卡一精品卡二卡三网站乱码 | 一区二区三区高清不卡| 免费免费啪视频在线观看| 亚洲欧美韩国综合色| av三级在线播放| 午夜精品福利一区二区蜜股av| 香蕉av一区| 5月丁香婷婷综合| 三级中文字幕在线观看| 中文字幕亚洲欧美一区二区三区| 亚洲天堂网站| 国产精品视频自在线| 亚洲性人人天天夜夜摸| 中文字幕一区二区三区乱码| 99国产精品久| 情趣网站视频在线观看| 欧美一区二区网站| 黄色成人在线观看网站| 国产999精品视频| 亚洲精品九九| 国产在线精品91| 亚洲线精品一区二区三区 | 午夜精品久久久久| 毛片激情在线观看| 综合136福利视频在线| 亚洲盗摄视频| 久久久久网址| 成人av网站在线| 国产理论片免费观看| 欧美三级在线看| 亚洲精品国产嫩草在线观看| 68精品国产免费久久久久久婷婷| 欧美a级片网站| 国产黄色激情视频| 亚洲成人免费电影| 美女18一级毛片一品久道久久综合| 韩国精品美女www爽爽爽视频| 国内激情久久| 免费国产a级片| 91成人在线观看喷潮| 天天综合网天天| 91亚洲国产成人久久精品网站| 国产一区二区精品在线观看| 欧美高清xxxxxkkkkk| 日韩精品免费综合视频在线播放| 欧美freesex8一10精品| 久久久久久国产精品免费免费| av在线不卡免费看| 在线观看av网站永久| 亚洲三级av在线| 亚洲高清影视| 黑森林福利视频导航| 3atv在线一区二区三区| 欧美人与动xxxxz0oz| 欧美 日韩 国产 在线观看| 亚洲最大色网站| 欧美日韩精品一区二区三区视频| av免费观看久久| 国产精品色婷婷| 特黄毛片在线观看| 69174成人网| 国产精品毛片高清在线完整版| 91九色在线播放| 92看片淫黄大片看国产片| 国产欧美日韩激情| 亚洲天堂资源| 国产精品日韩高清| 亚洲天堂av一区| 亚洲成人高清| 亚洲伊人婷婷| 欧洲视频一区二区| 亚洲自拍电影| 妞干网在线免费视频| 亚洲精品一区二区精华| 欧美久久久久| 992tv成人国产福利在线| 久久99精品久久久久久噜噜 | 久久一留热品黄| 91超碰在线播放| 99久久伊人精品影院| 一区二区三区在线观看视频| 国产精品日韩精品在线播放| 久久久久亚洲av无码专区喷水| 欧美日韩aaaaaa| 国产成人影院| 成人www视频网站免费观看| 最近2019年日本中文免费字幕 | 99久久综合国产精品二区| 久久亚洲综合网| 色天天综合久久久久综合片| 天堂日韩电影| 人妻内射一区二区在线视频| 亚洲欧美激情一区| 久久福利资源站| 99riav视频在线观看| 亚洲精品乱码久久久久久蜜桃91 | 4438全国成人免费| 久久精品视频在线看| 向日葵视频成人app网址| 先锋影音亚洲资源| 精品99一区二区| 免费看黄色91| 91九色美女在线视频| 亚洲乱码一区二区三区 | 中文字幕在线观看日本| 亚洲精品日韩av| 欧美香蕉大胸在线视频观看| 欧美日韩有码| 美女胸又www又黄的网站| 日本精品久久久久久久| 亚洲一区二区三区不卡国产欧美| 视频一区欧美| 亚洲字幕成人中文在线观看| 91日本在线视频| 欧美日韩一区视频| 性欧美长视频| 嗯啊主人调教在线播放视频| 日本国产中文字幕| 久久视频在线播放| 国产精品久久毛片av大全日韩| 五月综合久久| 欧美女子与性| 欧美日韩一区二区三区在线观看免 | 国产高清精品一区| 欧美疯狂性受xxxxx喷水图片| 久久精品日韩欧美| 中文av在线全新| 日韩在线一级片| 日韩免费在线播放| 在线亚洲精品福利网址导航| 久久精品官网| 韩国理伦片久久电影网| 国产夫妻视频| 精品国产乱码久久久久软件| 国产偷亚洲偷欧美偷精品| 久久久久久9999| 欧美a级成人淫片免费看| 中文字幕在线三区| 日韩日韩日韩日韩日韩| 91精品国产高清自在线看超| 色综合久久久久| 国产综合色精品一区二区三区| 免费观看亚洲天堂| 欧美在线观看在线观看| 中文字幕精品—区二区日日骚| 欧美日韩国产第一页| 一本色道久久综合精品竹菊| 狠狠狠色丁香婷婷综合久久五月| 一区二区三区四区高清视频| 中文字幕在线视频观看| 中文字幕一区二区三区乱码| 亚洲18私人小影院| 在线不卡欧美精品一区二区三区| 成人av电影免费在线播放| 日韩国产欧美| 三级成人黄色影院| 在线免费观看高清视频色| 亚洲三区在线| 国产高清在线不卡| 亚洲精品国产成人| 一区二区国产视频| 久久 天天综合| 日本在线电影一区二区三区| 99re6在线精品视频免费播放| 超碰超碰97| 一本久道久久综合| 国产精品免费一区二区三区都可以| 亚洲福利视频二区| 一区二区在线观看免费 | 无码av免费一区二区三区试看| 国产在线精品一区二区不卡了| 91欧美国产| 日韩视频一二区|