1. 方法区:
(1) 类加载的时候,会将静态方法和静态变量常驻于方法区,不会被垃圾回收
(2) 字符串常量池保存在方法区中,比如String a = 'hello',字符串无用时,就被清理出常量池;
(3) 静态方法会常驻内存,如果程序中存在大量静态方法,则会占用过多内存,从而影响性能
2. 堆:
(1) 存放实例化对象
(2) 新生代、老年代
(3) 线程共享
(4) 垃圾回收机制
3. 栈:
(1) 存放基本数据(int, float, double)类型和对象引用
(2) 压栈:当执行对象中方法时,会从堆中对象的方法和变量(局部变量)拉到栈中执行;
当执行静态方法时,会从方法区拉到栈中执行
(3) 线程私有的,随线程而生,随线程而亡,即方法执行结束,其变量就被回收
(4) 后进先出(LIFO)
(5)存取速度快比堆快,堆需要动态分配内存
4. 程序计数器:记录着当前线程所执行的字节码(class)的行号指示器。
5. Java内存区域图
6. 类加载机制