1.Java程序跨平台运行的原因

主要原因是:各种平台的JVM和字节码文件

Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在运行的过程中

将字节码指令转换为具体平台的机器指令。JVM运行在用户态,操作系统将JVM看作是一个特殊的软件,JVM启动的时候,OS给其划分

一定的内存供其运行字节码文件。存在基于JVM的其他编程语言的原因:对应特定语言的编译器可以将源码翻译成字节码文件,这个字节码可以被JVM识别并执行。

注意:执行引擎其实就是一系列的方法组成的流程---对应的就是线程,JVM执行字节码指令是基于栈的,所有操作数入栈。

Java的线程是用户态线程,线程状态改变维护都在用户态。

2.Java程序运行时内存区域划分

进行内存区域划分是由谁完成的---JVM完成,它将从操作系统获得内存,按照数据的存储结构模拟实际机器对内存进行划分。

将内存划分为以下几个区域:

  PC:字节码解释器通过PC的值找到下条要执行的字节码指令---线程私有

  虚拟机栈:存储Java方法的局部变量和参数,属于线程私有

  本地方法栈:存储JVM使用到的本地方法相关的局部变量和参数,线程私有

  堆:存储new产生的对象以及数组,是JVM垃圾回收的主要区域,线程共享

  方法区:存储类信息、常量、静态变量等,线程共享

  运行时常量池:存放在执行过程中生成的常量,属于方法区的一部分

最新文章

  1. angular $http 与form表单的select-->refine
  2. WPF DatePicker只显示年和月 修改:可以只显示年
  3. 使用sqlserver的游标功能来导数据的常见写法
  4. iOS Plist文件,增删改查
  5. oracle 10gwindow7安装添加内容
  6. centos下的防火墙配置
  7. hihoCoder #1176 : 欧拉路·一 (简单)
  8. How to Use a Function or a Procedure as a Parameter in another Function
  9. maven 搭建企业级web项目
  10. Matplotlib不显示图形
  11. spoj 3871 gcd extreme
  12. C#获取本机局域网ip和公网ip
  13. python的time模块常用内置函数
  14. SUSE12SP3-Zookeeper安装
  15. 完美解决cannot resolve symbol servlet 的报错
  16. [其它]安装ios12 developer beta 3出错
  17. git - 移除文件以及取消对文件的跟踪
  18. String.format和MessageFormat.format的对比用法
  19. Scala里面如何使用枚举
  20. 20180531-Postman 常用测试结果验证及使用技巧

热门文章

  1. perl6中函数参数(1)
  2. ms17-010 攻击win7漏洞复现
  3. OOM有哪些情况,SOF有哪些情况
  4. Vue组件-组件的属性
  5. VMware无法识别USB设备
  6. leetcode 121 122 123 . Best Time to Buy and Sell Stock
  7. redis之(十八)redis的支持水平扩容的集群特性,以及插槽的相关操作
  8. hdu 1428(很好的一道题,最短路+记忆化搜索)
  9. ZIP排除指定目录进行压缩
  10. PHP PDO类 单例