方法区与堆一样都是线程共享的内存区域它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。而运行时常量池是方法区的一部分它主要用于存放编译期声明各种字面量和符号引用。
创新互联公司专注于河间网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供河间营销型网站建设,河间网站制作、河间网页设计、河间网站官网定制、
微信小程序开发服务,打造河间网络公司原创品牌,更为您提供
河间网站排名全网营销落地服务。
直接内存
直接内存并不是虚拟机运行时数据区的一部分也是不Java规范中定义的内存区域你可以简单理解为堆外内,内存分配不受Java堆大小的限制但受整个内存大小的限制。
类加载的流程
加载、验证、准备、解析、初始化五步其中加载、验证、准备、初始化是顺序执行的而解析则不一定它有可能会在初始化之后执行。
加载
在加载阶段JVM需要完成三个步骤:首先通过类的全限定名来获取定义此类的二进制字节流然后将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,最后在内存中生成一个代表这个类的java.lang.Class对象作为方法区这个类的各种数据入口。在第一步获取二进制字节流中并没有明确的指出从一个*.class文件中获取规定的灵活性导致我们可以从ZIP、从数据库获取。
验证
验证其实就是为了确保Class文件字节流中包含信息符合JVM的要求因为Class文件的来源途径不一定中规中矩的从编译器产生,也可能用十六进制编辑器直接编写Class文件校验流程为文件格式校验、元数据验证、字节码验证这地方的具体安全校验方式不再细说。
分享文章:Java虚拟机--一段Java程序的生命史(四)
标题来源:
http://bzwzjz.com/article/cposih.html