加强人大网站建设app推广引流方法
目录
堆、栈、方法区分别都存储了那些内容?
堆(heap)
栈(stack)
方法区(method)
在 java 中 wait 和 sleep 方法的区别?
堆、栈、方法区分别都存储了那些内容?
堆:对象的实例、数组
栈:对象的引用、基本数据类型
方法区:类(class)、静态方法、静态变量、常量、成员方法、常量池
堆(heap)
在JVM中就只有一个堆,当虚拟机开启时创建,所有的线程都共用这一个堆。
- 堆内存中可以存储对象的实例,也就是new出来的对象。还可以存数组。
- 而new对象的引用地址则存储在stack栈中,堆中只存储对象本身。
栈(stack)
java栈和堆不同的是每一个线程都有一个stack,而且栈的区域非常小,大概只有1M左右,但存储速度非常快;所以我们把快速执行的任务存储在stack中。
- 栈中可以存储基本数据类型和对象的引用(是引用地址,而不是实例)。
方法区(method)
方法区又叫静态区,方法区中存储的都是整个程序中唯一存在的元素,所以方法区和堆一样被所有线程共享。
方法区可以存储:
- 类(class)
- 静态方法
- 静态变量(static变量)
- 常量
- 成员方法
- 常量池
在 java 中 wait 和 sleep 方法的区别?
- 方法归属不同:sleep() 来自 Thread,是 Thread 的静态方法;而wait() 来自 Object,是 Object 的成员方法,每个对象都有。
- 锁特性不同:sleep() 不释放锁;wait() 释放锁。
- 醒来时机不同:执行 sleep(long) 和 wait(long) 的线程都会在等待相应毫秒后自动醒来,wait(long) 和 wait() 还可以被 notify 唤醒,wait() 如果不唤醒就一直等下去;它们都可以被打断唤醒。sleep可以自然醒,wait必须等待别人唤醒;
最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。