java内存结构学习
方法区,堆,本地方法栈,程序技术器,栈
线程私有:
栈:为执行java方法服务。
本地方法栈:主要是native方法。
程序计数器:主要存放当前执行指令的地址
线程共享:
堆:存放类的实例信息,绝大多数创建的实例对象会存放在这里。
方法区:主要存放类的信息,常量,静态变量。垃圾回收器针对这块的回收主要是针对常量池和类的卸载。
jvm只是规定了有方法区这么个概念和它的作用,并没有规定如何去实现它,jdk8永久代被废弃了,永久代替换成本地内存。
jvm类加载过程:
(1)加载:jvm去查找字节流(.class文件),将.class文件中的二进制数据读入内存,放在运行时区域的方法区内,然后在堆中创建java.lang.Class对象,用来封装类在方法区的数据结构。
(2)链接:
1.验证:验证加载进来的二进制数据是否满足虚拟机规范,不会造成安全错误。
2.准备:负责为类的静态成员分配内存,并设置初始值。
3.解析:将类的二进制数据中的符号引用替换成直接引用。
符号引用:即一个字符串。
直接引用:可以理解为一个内存地址。
(3)初始化:
初始化,则是为标记为常量值的字段赋值的过程,只对static修饰的变量和语句进行初始化。
jvm调优: