色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

發生內存泄露時電腦的反應時什么樣的

夏志豪2年前16瀏覽0評論

發生內存泄露時電腦的反應時什么樣的?

只針對Java來說

內存泄露本意是申請的內存空間沒有被正確釋放,導致后續程序里這塊內存被永遠占用(不可達),而且指向這塊內存空間的指針不再存在時,這塊內存也就永遠不可達了,內存空間就這么一點點被蠶食,借用別人的比喻就是:比如有10張紙,本來一人一張,畫完自己擦了還回去,別人可以繼續畫,現在有個壞蛋要了紙不擦不還,然后還跑了找不到人了,如此就只剩下9張紙給別人用了,這樣的人多起來后,最后大家一張紙都沒有了。

內存溢出是指存儲的數據超出了指定空間的大小,這時數據就會越界,舉例來說,常見的溢出,是指在棧空間里,分配了超過數組長度的數據,導致多出來的數據覆蓋了棧空間其他位置的數據,這種情況發生時,可能會導致程序出現各種難排查的異常行為,或是被有心人利用,修改特定位置的變量數據達到溢出攻擊的目的。而Java中的內存溢出,一般指【OOM:發生位置】這種Error,它更像是一種內存空間不足時發生的錯誤,并且也不會導致溢出攻擊這種問題,舉例來說,堆里能存10個數,分了11個數進去,堆就溢出了1個數,JVM會檢測、避免、報告這種問題,所以雖然實際上JVM規避了內存溢出帶來的問題,但在概念上來說,它確實是溢出才導致的,只是Java程序員在看到這個問題時,腦袋里的反應會是“內存不夠了,咋回事,是不是又是哪個大對象沒釋放”之類,而不是像C程序員“我X被攻擊了/程序咋寫的搞溢出了”(這段是我臆想的)。同時對于Java來說,傳統意義的溢出攻擊也無法奏效,因為Java的數組會檢查下標,對超出數組下標的賦值會報ArrayOutOfIndex錯誤。

而內存泄露的話,個人意見在Java里是不存在的,gc采用根搜索算法時,不可達的對象會被回收,gc是會搜索回收這些空間的,由于程序員個人問題,沒用的對象不回收但可達,這種情況能不能界定為內存泄露,我覺得是個哲學問題(對象可達,但空間被占用了,對象也不再使用了),個人覺得是不能界定為內存泄露的。

答完,個人水平有限,如果有錯漏希望大家隨意指正指教,多謝

java泄漏,發生內存泄露時電腦的反應時什么樣的