JVM实例以及内存的分配机制
JVM:一台用来模拟计算机执行计算指令的虚拟计算机,拥有自己的指令,指令执行环境,虚拟内存等。
下面介绍虚拟机(JVM)--cpu,寄存器,内存,指令
======================================================================================================
1.创建JVM装载环境和配置(GetApplicationHome取得Java.exe进程的路径,chshi)
2.装载JVM.dll
3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例,此时JVM与操作系统联系起来,因为JVM是构建在操作系统上面。此时它属于操作系统的一个进程有自己的环境空间。
4.调用JNIEnv实例装载并处理class类。(加载class文件)。
当运行程序时,java文件编译成特定指令的class文件,就是JVM指令,虚拟机JVM再执行指令,最后底层通过操作系统来实现调用。JNIEnv调用GetStaticMethodID
查找main类,之后调用CallStaticVoidMethod执行main方法,于是java程序就会在JVM里面执行。
5.加载class文件到内存空间之后,就会把内存进行分配成(针对线程而言):全局共享的:堆以及方法区,线程似有的栈,PC计数器以及本地方法区。
======================================================================================================
happens-before:原则----
线程内存与主内存---------共享内存复制数据到线程内存,之后同步刷新到主内存 volatile就是直接共享内存,达到内存一致性
重排序-------------------JVM对指令进行优化排序,和代码的顺序不一致
===
最新文章
- git stash和git stash pop
- Delphi的哈希表(一)
- shell 检测ip的合法性与检测网络掩码的合法性
- HDU 4763 (KMP算法)
- .getBoundingClientRect()
- 《Java程序员面试笔试宝典》终于在万众期待中出版啦~
- Android学习之Drawable(一)
- window.name 跨域
- [置顶] 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!
- android下拉刷新控件 android-pulltorefresh
- 本元鼠标自动点击器 v1.31 官方绿色版
- oracle的exp和imp命令的使用【转载】
- 怎么从一台电脑的浏览器输入地址访问另一台电脑服务器(WAMP服务器已搭建,PHPSTORM装好了)
- 爬虫之Scrapy框架介绍
- JdbcTemplate 配置多数据源(完全照抄,完整)
- Tomcat8源码笔记(一)Lifecycle接口
- 28BYJ-48步进电机
- int __get_order(unsigned long size)
- ​插件化DPI在商用WIFI中的价值
- Evaluate Reverse Polish Notation (STRING-TYPE CONVERTION)