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,在其他方法中可以访问这个对象。
对象逃逸和方法逃逸会影响程序的性能和安全性。对象逃逸会增加垃圾回收的工作量,降低程序的效率。方法逃逸会增加对象的生命周期,可能会导致内存泄漏。