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对指令进行优化排序,和代码的顺序不一致
===
JVM实例以及内存的分配机制的更多相关文章
- berkeley db 内存池分配机制
__memp_alloc() 注: MPOOL_ALLOC_SEARCH_DYN 没有 出现在 bdb document上, 也没出现在 除了mp_alloc外的代码里. 先删了 以便代码清楚. 按 ...
- Java内存垃圾回收机制(转贴)
Java的堆是一个运行时数据区,类的实例(对象)从中分配空间.Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通 过new.newarray.anewarray和mul ...
- 阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧
内存分配机制 逐步分析 类加载检查: 虚拟机遇到一条new指令(new关键字.对象的克隆.对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否 ...
- JVM的艺术-对象创建与内存分配机制深度剖析
JVM的艺术-对象创建与内存分配机制深度剖析 引言 本章将介绍jvm的对象创建与内存分配.彻底带你了解jvm的创建过程以及内存分配的原理和区域,以及包含的内容. 对象的创建 类加载的过程 固定的类加载 ...
- JVM 内存分配机制总结
大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区),Heap(堆),Program Counter Register(程序计数器), VM Stack(虚拟机栈,也 ...
- 8.JVM内存分配机制超详细解析
一.对象的加载过程 之前研究过类的加载过程.具体详情可查看文章:https://www.cnblogs.com/ITPower/p/15356099.html 那么,当一个对象被new的时候,是如何加 ...
- JVM学习之内存分配一
转自:http://blog.csdn.net/mazhimazh/article/details/16879055,多谢博主分享 我们知道计算机的基本构成是:运算器.控制器.存储器.输入和输出设备, ...
- JVM内存管理的机制
Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...
- jvm原理之内存机制
转自:https://www.cnblogs.com/dreamowneryong/p/6381633.html JVM栈由堆.方法区,栈.本地方法栈.程序计数器等部分组成,结构图如下所示: 还有一张 ...
随机推荐
- 线程池ThreadPoolExecutor里面4种拒绝策略
ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小,AliveTime,拒绝策略等.常用构造方 ...
- 重塑 data.table
在前面的章节中,我们已经学习了如何使用 reshape2 扩展包对 data.frame 进行塑形.其实,data.table 扩展包为 data.table 对象提供了更快更强的 dcast( ) ...
- vs_u8前缀
1.ZC: 个人测试下来,VS2015开始 支持 u8前缀. 2.What's New for Visual C++ in Visual Studio 2015 https://msdn.micros ...
- QWebEngine_C++_交互
参考网址:http://blog.csdn.net/liuyez123/article/details/50509788 ZC: 该文章里面的: “ <ahref="javascrip ...
- jq对象和DOM对象的互换
var oJq; //JQ对象 var oDom; //dom对象 oDom = oJq[index]; // JQ对象转化为oDom对象 oJq = $(oDom); //DOM对象 ...
- CSS padding 属性
定义和用法 padding 简写属性在一个声明中设置所有内边距属性. 说明 这个简写属性设置元素所有内边距的宽度,或者设置各边上内边距的宽度.行内非替换元素上设置的内边距不会影响行高计算:因此,如果一 ...
- 在EORow或者VORow中对数据进行重复性校验
需求:在设置付款条件时不允许账期+付款方式重复. 由于本次需求仅需要对VO缓存中的数据进行重复性校验,所以仅需进行缓存遍历即可,不需要校验数据库. 方式1,在EORow的进行数据校验. public ...
- CSS中em、rem和px的区别
任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px,1rem=16px. EM特点 1. em的值并不是固定的: 2. em会继承父级元素的字体大小. rem特点 r ...
- 201621123006 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- iOS-----MFMessageCompose 和 MFMailComposeViewController的使用方法
MFMessageCompose 和 MFMailComposeViewController的使用方法 使用MFMessageComposeViewCOntroller发短信 应用想自己提供界面让用户 ...