日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?

發布時間:2023/12/2 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java动态扩展_java栈内存动态扩展要怎么理解?要如何实现? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小伙伴們知道如何在java棧中內存動態擴展嗎?這是虛擬機中的一個概念,下面讓我們一起來看看該如何實現吧。

一、內存概念

在java中,我們一般會簡單把java內存區域劃為兩種:堆內存與棧內存。其實這種劃分是比較粗粒度的。其中棧內存就是指的是虛擬機棧,堆內存指java堆。

棧內存

實際為虛擬機棧。Java中每個方法被執行時都會同時創建一個棧幀,它會被用來存儲局部變量、操作棧,動態鏈接,方法出口等信息。它的局部變量會包括各種基本類型的變量及對象的引用變量,且它們都是在方法的棧內存中分配。java局部變量所需內存空間一定是在編譯期間完成的,當它進入一個方法時,這個方法所需的局部變量空間就已經確定,在方法運行期間一定不會改變。當在一段代碼塊中定義一個變量時,java就在棧中為這個變量分配內存空間,當超過變量的作用域后,java會自動釋放掉為該變量分配的內存空間,該內存空間就能夠立刻被另作他用。當線程請求的棧深度大于虛擬機所允許的深度,則拋出StackOverflowError異常。當虛擬機棧無法擴展時候則拋出OutOfMemoryError異常。

堆內存

堆內存唯一目的就是new出對象實例,它會在虛擬機啟動時創建。它全部的對象實例與數組都需在堆上分配。堆是由垃圾回收負責的,所以也稱為“GC堆”,垃圾回收采用的分代算法,堆因此分為新生代與老年代。堆的優勢是可以動態地分配內存大小,生存期也不用事先告訴編譯器,因為它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。但它有缺點,由于要在運行時動態分配內存,存取速度會較慢。

二、內存實現

動態擴展就是在棧空間不夠的時候,自動加大棧的空間,避免StackOverflow異常,JVM是沒有實現這個功能的。

動態棧一般有兩種方法:Segmented stack和Stack copying:

Segmented stack

它可以這么理解,當一個雙向鏈表把多個棧連接起來,它一開始只分配一個棧,當這個棧的空間不夠時,就再分配一個,用鏈表一個一個連起來。

Stack copying

作用為在棧不夠時,分配一個更大的棧,再把原來的棧復制過去。

使用函數alloca可以實現在棧上動態分配內存:The

function?alloca?has?the?same?calling?sequence?as?malloc;

however,?instead

of?allocating?memory?from?the?heap,?the?memory?is?allocated?from?the?stack?frame?of?the?current

function.The?advantage?is?that?we?don?'t?have?to?free?the?space;

it?goes?away?automatically?when?the

function?returns.The?alloca

function

increases?the?size?of?the?stack?frame.The?disadvantage?is?that?some?systems

can?'t?support?alloca,?if?it'

s?impossible?to?increase?the?size?of?the?stack?frame

after?the

function?has?been?called.Nevertheless,?many?software?packages?use?it

,?and?implementations?exist

for?a?wide?variety?of?systems.

一般只支持Linux類型系統。#include

void?*alloca(size_t?size);

以上就是關于java棧內存動態擴展的所以內容了,更多相關java入門知識,可以來我們的網站來了解詳情噢。

推薦閱讀:

總結

以上是生活随笔為你收集整理的java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。