Java中的對象逃逸和方法逃逸是指在程序執行過程中,對象或者方法在不同的作用域之間轉移的現象。
對象逃逸是指一個對象在內存中被創建之后,它不僅僅被當前方法所持有,還被傳遞到了另外一個方法中或者賦給了一個類變量或公共變量,從而存在于方法之外的作用域中。
public class User { String name; int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } } public class Main { public void createUser(String name, int age) { User user = new User(); user.setName(name); user.setAge(age); saveUser(user); } public void saveUser(User user) { // do something } }
在上面的代碼中,創建了一個User對象,在createUser方法中將它傳遞給了saveUser方法,并且存在于方法之外的作用域中。
方法逃逸是指一個方法所創建的對象,在方法結束之后被另外一個對象所引用,從而存在于方法之外的作用域中。
public class Main { private static User user; public static void main(String[] args) { createUser("Alice", 18); System.out.println(user.getName()); System.out.println(user.getAge()); } public static void createUser(String name, int age) { User user = new User(); user.setName(name); user.setAge(age); Main.user = user; } }
在上面的代碼中,createUser方法創建了一個User對象,并將它賦給一個靜態變量user,在其他方法中可以訪問這個對象。
對象逃逸和方法逃逸會影響程序的性能和安全性。對象逃逸會增加垃圾回收的工作量,降低程序的效率。方法逃逸會增加對象的生命周期,可能會導致內存泄漏。
上一篇css3 圓角表格