java的堆和棧 java中的堆和棧有什么區(qū)別?要詳細點的?
java中的堆和棧有什么區(qū)別?要詳細點的?舉個簡單的例子。每次調(diào)用方法時,都會在堆棧中創(chuàng)建一個堆棧幀,以保存方法中的局部變量,例如主方法中的測試變量。但是,新方法將在堆中創(chuàng)建對象,然后將堆地址保存在測
java中的堆和棧有什么區(qū)別?要詳細點的?
舉個簡單的例子。每次調(diào)用方法時,都會在堆棧中創(chuàng)建一個堆棧幀,以保存方法中的局部變量,例如主方法中的測試變量。但是,新方法將在堆中創(chuàng)建對象,然后將堆地址保存在測試變量中。在test1方法中,B變量直接存儲在堆棧幀中,因為它是基本類型。調(diào)用test1方法時,堆棧幀會自動彈出,堆棧中的變量也會被回收,B和test變量也會被回收,但堆中的對象需要在垃圾回收期間被回收。當JVM檢測到根對象沒有引用測試對象時,它將執(zhí)行垃圾收集。