Java程序运行时内存划分
2024-08-27 23:21:51
1.Java程序跨平台运行的原因
主要原因是:各种平台的JVM和字节码文件
Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在运行的过程中
将字节码指令转换为具体平台的机器指令。JVM运行在用户态,操作系统将JVM看作是一个特殊的软件,JVM启动的时候,OS给其划分
一定的内存供其运行字节码文件。存在基于JVM的其他编程语言的原因:对应特定语言的编译器可以将源码翻译成字节码文件,这个字节码可以被JVM识别并执行。
注意:执行引擎其实就是一系列的方法组成的流程---对应的就是线程,JVM执行字节码指令是基于栈的,所有操作数入栈。
Java的线程是用户态线程,线程状态改变维护都在用户态。
2.Java程序运行时内存区域划分
进行内存区域划分是由谁完成的---JVM完成,它将从操作系统获得内存,按照数据的存储结构模拟实际机器对内存进行划分。
将内存划分为以下几个区域:
PC:字节码解释器通过PC的值找到下条要执行的字节码指令---线程私有
虚拟机栈:存储Java方法的局部变量和参数,属于线程私有
本地方法栈:存储JVM使用到的本地方法相关的局部变量和参数,线程私有
堆:存储new产生的对象以及数组,是JVM垃圾回收的主要区域,线程共享
方法区:存储类信息、常量、静态变量等,线程共享
运行时常量池:存放在执行过程中生成的常量,属于方法区的一部分
最新文章
- angular $http 与form表单的select-->;refine
- WPF DatePicker只显示年和月 修改:可以只显示年
- 使用sqlserver的游标功能来导数据的常见写法
- iOS Plist文件,增删改查
- oracle 10gwindow7安装添加内容
- centos下的防火墙配置
- hihoCoder #1176 : 欧拉路·一 (简单)
- How to Use a Function or a Procedure as a Parameter in another Function
- maven 搭建企业级web项目
- Matplotlib不显示图形
- spoj 3871 gcd extreme
- C#获取本机局域网ip和公网ip
- python的time模块常用内置函数
- SUSE12SP3-Zookeeper安装
- 完美解决cannot resolve symbol servlet 的报错
- [其它]安装ios12 developer beta 3出错
- git - 移除文件以及取消对文件的跟踪
- String.format和MessageFormat.format的对比用法
- Scala里面如何使用枚举
- 20180531-Postman 常用测试结果验证及使用技巧