概述
Java中的内存区域
JVM 的内存区域分为私有区域(程序计数器、虚拟机栈、本地方法区)、线程共享区域(对、方法区)和直接内存。
线程私有区域的生命周期与线程仙童,随线程的启动而创建,随着线程的结束而销毁,在JVM内部,每个线程斗鱼操作系统的本地线程直接映射,因此线程私有区域的存在与否和本地线程的启动和销毁对应
线程共享区域随着虚拟机的饿启动而创建,随着关闭而销毁
直接内存也交所对外内存,他并不是JVM运行时的数据区的一部分,但是在并发中被频繁使用,JDK的nio模块提供基于CHannel和Buffer的IO操作就是基于对堆外内存实现的,nio模块通过调用本地方法库直接在操作系统上分配堆内存,然后直接使用DirectByteBuffer对象作为这块内存的引用对内存进行操作,Java进程可以通过对外内存技术避免在Java对和Native中来回复制数据带来的资源兰妃和性能损耗和性能消耗,因此对外内存在搞并发场景下被广泛使用。
程序计数器
程序计数器 线程私有
去内存泄漏的问题,它是一块很小的内存空间,用于存储当前运行的线程锁执行的字节码的行号指示器,每个运行中的线程中都有一个独立的程序计数器,在方法正在执行时,该方法的程序计数器记录的是事实虚拟机字节码指令的地址,如果该方法执行的是本地方法,则程序计数器的值为空
虚拟机栈
线程私有 描述Java方法的执行过程,虚拟机栈是描述Java方法的执行过程的内存模型,提前在当前栈针中存储了局部变量表、动态链接、方法出口等信息。同时,栈针用来存储部分运行时数据及其数据结构,处理动态链接方法的返回值和异常分派。
栈针用来记录方法的执行过程,在方法被执行时虚拟机会为其创建一个与之对应的栈针,方法的执行和返回对应栈针在虚拟机栈中的入栈和出栈,无论方法时正常运行还是异常完成(抛出了在方法内未被捕获的异常),都是为方法运行结束。
本地方法区
本地方法区和虚拟机栈作用类似,区别是虚拟机栈为执行Java方法服务,本地方法栈为本地方法服务
堆
堆,也叫云信使数据区,线程共享。在JVM运行过程中创建的对象和产生的数据都被存储在堆中,堆是被线程共享的内存区域,也是垃圾回收器进行垃圾回收的最重要的内存区域。由于现代JVM采用分代回收算法,因此,JVM堆从GC的角度可以细分为新生代、老年代、永久代。
方法区
方法区,线程共享,方法区也成为永久代,用于存储常量、静态变量、类信息、即时编译器编译后的机器码、运行时常量池等数据
JVM吧GC分代手机款张志方法区,及时用Java堆的永久代来实现方法区,这样JVM的垃圾回收期就可以像管理java堆一样管理这部分内存,永久代的内存回收主要正对常量池的回收和类的卸载,以你可回收的对象很少
常量被存储在运行时常量池中,是方法区的一部分,静态病例也属于方法区的一部分,在类信息中不但保存了类的版本、字段、方法、接口等描述信息,还保存了常量信息
在即时编译后,代码的内容将在执行阶段(类加载完成之后)被保存在付费区的运行时常量池中,Java虚拟机堆class文件每一部分的格式都有明确的规定,只有符合jvm规范的class文件才能通过虚拟机的检查,然后被装载、执行。
最后
以上就是风中猫咪为你收集整理的JVM之Java中的内存区域Java中的内存区域的全部内容,希望文章能够帮你解决JVM之Java中的内存区域Java中的内存区域所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复