
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数软件编程开发程序员都在学习与应用的一种编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程入门需要掌握哪些知识点。
1、运行时数据区
JVM运行时数据区、JVM内存结构、JVM内存模型都是指Java虚拟机的内存空间划分,主要分为5个部分:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区
注意:JVM内存模型与Java内存模型有严格不同,Java内存模型是与多线程编程相关。
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,统称运行时数据区域。
在类加载过程中的装载阶段:将Calss文件对应字节流所代表的静态存储结构转化为方法区的运行时数据结构,在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。
也就是说:类文件被类装载器装载进来之后,类中的内容,如变量,常量,方法,对象等数据得需要存储在JVM中对应的空间中,该空间就是运行时数据区。
JDK8同JDK7比,大差别是:元数据区取代了永久代。元空间Metaspace本质和永久代PermSpace类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间大区别在于:元数据空间并不在虚拟机中,而是使用本地内存。
2、常量池
常量池分为静态常量池,运行时常量池,还有字符串常量池。
静态常量池
储存的就是字面量以及符号引用
字符串常量池
字符串常量池是JVM为了提升性能和减少内存消耗针对字符串(String类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。
JDK7之前,字符串常量池存放在永久代。JDK7字符串常量池和静态变量从永久代移动到Java堆中。
这是因为永久代的GC回收效率太低,只有在FullGC的时候才会被执行回收。Java程序中通常会有大量被创建的字符串等待回收,将字符串常量池放到堆中,能够更高效及时地回收字符串内存。
3、方法区(MethodArea)
方法区属于是JVM运行时数据区域的一块逻辑区域,是各个线程共享的内存区域,在虚拟机启动时创建
Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却又一个别名叫做Non-Heap(非堆),目的是与Java堆区分开来
当虚拟机要使用一个类时,它需要读取并解析Class文件获取相关信息,再将信息存入到方法区。方法区会存储已被虚拟机加载的类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
4、永久代与元空间
永久代以及元空间是HotSpot虚拟机对虚拟机规范中方法区的两种实现方式。并且,永久代是JDK8之前的方法区实现,JDK8及以后方法区的实现变成了元空间。大的区别在于:元空间不在虚拟机设置的内存中,而是使用本地内存
永久代有一个JVM本身设置的固定大小上限,无法进行调整,而元空间使用的是直接内存,受本机可用内存的限制,虽然元空间仍旧可能溢出,但是比原来出现的几率会更小。
元空间里面存放的是类的元数据,加载多少类的元数据就不由MaxPermSize控制,而由系统的实际可用空间来控制,这样能加载的类就更多。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。