java解释器虚拟机-java 虚拟机内存/线程共享情况
大多数 JVM 将内存区域划分为Method Area(Non-Heap)(方法区),Heap(堆), (程序计数器),VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack(本地方法栈),其中Method Area和 Heap是线程共享的 ,,Native Method Stack和 是非线程共享的。为什么分为线程共享和非线程共享的呢?请继续往下看。
首先我们熟悉一下一个一般性的 Java 程序的工作过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每个java程序都需要运行在自己的JVM上,然后告知 JVM 程序的运行入口,再被 JVM 通过字节码解释器加载运行。那么程序开始运行后java解释器虚拟机,都是如何涉及到各内存区域的呢?
概括地说来,JVM初始运行的时候都会分配好Method Area(方法区)和Heap(堆),而JVM 每遇到一个线程,就为其分配一个 (程序计数器),VM Stack(虚拟机栈)和Native Method Stack(本地方法栈)java解释器虚拟机,当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说知发生在Heap上)的原因。
法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的、等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出的错误信息
本文共 537 个字数,平均阅读时长 ≈ 2分钟
相关文章
- Java Web Servlet (Part D)- File Upload & Download
- java高级工程师面试情景题_Java高级工程师面试题III
- Java删除文件(delete file in java)[通俗易懂]
- java编译命令是什么_Java编译命令整理
- java.util.scanner sc_Java的Scanner sc=new Scanner(System.in)是什么意思「建议收藏」
- java jersey使用总结_Java Jersey2使用总结
- java dom4j生成xml格式化_Java DOM4J方式生成XML的方法「建议收藏」
- 【说站】java中Lombok有哪些注解
- java的栈内存和堆内存_Java本地方法栈
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」
- 【java】springboot 打包分离lib
- java创建线程池的几种方式_Java中的线程池
- Java冒泡排序的实现以及优化
- java基于ssm框架开发的视频论坛网站源码
- Java内存模型和线程安全
- Java String.valueOf 的应用
- java和python实现最短路径算法
- 【Java 集合】Java 集合的线程安全性 ( 加锁同步 | java.utils 集合 | 集合属性 | java.util.concurrent 集合 | CopyOnWrite 机制 )
- Java实现的一个超轻量级 HTTP 服务器详解编程语言
- 在运行时判断Class来自哪个jar包的Java代码详解编程语言
- Java 内存分配全面浅析详解编程语言
- Java虚拟机-内存tips详解编程语言
- Java常见的几种内存溢出及解决方案详解编程语言
- Java问题-java进程占用内存过高,排查原因详解编程语言
- Java trim()方法:去除字符串的前后空格
- 技术的融合突破极限:Java与Redis的技术融合(java与redis)
- 使用Redis存储Java对象(redis存java对象)
- Java 关闭 Redis 连接的指南(java关闭redis)
- java使用Weka、Linux和Java构建强大的数据分析系统(weka linux)