作者回复: 内存溢出是说程序需要申请的内存超过了JVM当前可以分配的最大内存,溢出。
内存泄漏是说期望被回收的内存对象没有被回收,泄漏。
内存泄漏持续发生,很可能引起内存溢出。
作者回复: 内存空间只需要标记是空闲就可以,交换以后To区就已经是空白的了。
作者回复: 可执行的代码都在方法区。
对象是类的实例,实例变量在堆中,同一个类的所有对象实例的方法只有一份,在方法区。
作者回复: 虚拟机内部的堆和栈不会map到操作系统的堆和栈,这样才能跨平台。
操作系统看JVM就是一个普通进程。
作者回复: 1 因为一个对象在from和to之间多次拷贝,然后才会放入老年代。
2 每个线程有自己的线程栈。
作者回复: 每个线程有自己的线程栈,用来管理方法的局部变量。而线程本身的管理不需要用栈。
事实上,线程是使用线程池管理的,请求到来,就到线程池中申请分配一个空闲线程,请求处理完,线程放回到空闲线程池中。
作者回复: 每个线程都可以访问这个方法,如果在这个方法内创建一个对象,那么就意味着“每个”线程都会“自己”创建一个对象。线程之间不会访问彼此的对象。