`

jmv第一节-jvm基础

 
阅读更多

 1.jvm的启动,先看一副图



 这个是jvm的启动流程,从加载jvm的配置到找到JVM.dll找到我们的程序的主入口main方法的过程。

 

2.JVM的整体架构



 这个是jvm的基本结构,jvm有的功能这里都展现出来的,加载class文件到方法区,生成对象到堆中,每个线程的私有的栈,垃圾收集器,实际执行引擎是这里的核心,它与所有的模块都有或多或少的交互

PC寄存器

每个线程拥有一个PC寄存器

在线程创建时 创建

指向下一条指令的地址

执行本地方法时,PC的值为undefined

 

方法区

保存装载的类信息

类型的常量池

字段,方法信息

方法字节码

通常和永久区(Perm)关联在一起

注意:jdk7以后Sring常量不会再方法去中分配空间,而是在堆中分配空间

 

Java栈

线程私有

栈由一系列帧组成(因此Java栈也叫做帧栈)

帧保存一个方法的局部变量、操作数栈、常量池指针

每一次方法调用创建一个帧,并压栈

注意:jvm对一些情景做了优化,并不是所有的对象都放到堆中,一些比较小的,且没有被共享的对象会分配到栈上,这样可以减少gc的次数,增加系统的性能

 

Java堆

和程序开发密切相关

应用系统对象都保存在Java堆中

所有线程共享Java堆

对分代GC来说,堆也是分代的

GC的主要工作区间

堆主要分为新生代和老年代(tenured)和新生代,新生代可以可以分为eden区,s0,s1(幸存区)。s0和s1大小是相等的2个区,主要与GC算法相关。

 

下面是一个综合的例子,从下面例子可以看出

 ,在运行一个方法的时候,各个部分信息分配在jvm的哪个区里



 

从这里也可以看出来,静态方法是放在方法区的。

 

3.jmv的内存模型

 



 从这个jvm内存模型图中可以看到,线程工作内存和主线程是存在着数据不一致性的,所谓的内存栅栏,那么我们怎么保证工作内存和主内存数据一致了,一种方法是,java为我们提供了锁的保护,在从主内存读取一个对象后,修改写回主内存这样锁才会释放,可以看成是原子性的

jvm指令重排

因为jvm会对运行指令进行优化,jmv会存在着指令重排问题,可以看下下面一个例子:

class OrderExample {
int a = 0;
boolean flag = false;

public synchronized void writer() {
    a = 1;                   
    flag = true;           
}

public synchronized void reader() {
    if (flag) {                
        int i =  a +1;      
        ……
    }
}
}

 假如有A,B 2个线程同时启动,A线程调用write方法,B线程调用read方法,在write线程中有2条语句,a=1,和flag=true,着2条语句执行是没有先后顺序的,可能先执行flag=true,这时候B线程就会执行到if语句块中,造成a的值和事先预想的不一致,为了解决这个问题,我们在方法上加上同步关键字synchronized这样就保证了方法体内所有的都是执行完成的,即线程A先执行,然后线程B执行,消除了指令重排的问题。

 

指令重排的基本原则

程序顺序原则:一个线程内保证语义的串行性

volatile规则:volatile变量的写,先发生于读

锁规则:解锁(unlock)必然发生在随后的加锁(lock)前

传递性:A先于B,B先于C 那么A必然先于C

线程的start方法先于它的每一个动作

线程的所有操作先于线程的终结(Thread.join())

线程的中断(interrupt())先于被中断线程的代码

对象的构造函数执行结束先于finalize()方法 

 

 

  • 大小: 43.8 KB
  • 大小: 245 KB
  • 大小: 34.9 KB
  • 大小: 41 KB
  • 大小: 13.1 KB
分享到:
评论

相关推荐

    JVM Diagnostics Guide 1.4.2

    JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2 JVM Diagnostics Guide 1.4.2

    JMV Screen Capturing-crx插件

    总的来说,JMV Screen Capturing-crx插件是一个强大且用户友好的屏幕捕获工具,提供了一种安全、便捷的方式来捕捉和分享屏幕内容,无论是在个人还是专业环境中,都能大大提高工作效率并保护用户的数据安全。

    一篇文章让你了解chaosblade-niaoshuai1

    首先,你需要从 ChaosBlade 的官方仓库(https://github.com/chaosblade-io/chaosblade-exec-jvm/tree/v0.1.0)获取并解压对应版本的代码。确保你已经下载了 ChaosBlade 的执行器,并了解其基本命令结构。`blade` 是...

    最新版JamVM 1.5.2

    JamVM is a new Java Virtual Machine which conforms to the JVM specification version 2 (blue book). In comparison to most other VMs (free and commercial) it is extremely small, with a stripped ...

    JVM调优.pptx

    JVM调优分享,简单的一些分享,希望能帮助大家。凑字数真的烦!!!

    jmv:R的jamovi

    MV 该模块代表jamovi随附的分析。 它包含许多常见的统计检验(例如t检验,ANOVA,相关矩阵,比例检验,列联表等)。... jmv可以通过以下方式安装: install.packages('jmv')jmv文档可以在jamovi网站上找到:

    ConsoleJMXMonitor

    带PID的本地JMV 带有 url 的远程 JVM 选项 : -Djmx.service.host=localhost -Djmx.service.port=9990 -djmx.service.url=service:jmx:remote+ " -Djmx.service.login=仅在需要凭据时才需要登录 -Djmx....

    Mirillis Action! 1.3.0.0破解版(屏幕录像软件)

    1、支持录制DirectX 9/10/11、OpenGL 游戏和应用程序的高清视频,并且支持FPS游戏性能基准。 2、支持在游戏录制过程中实时添加音频解说,以制作完美的游戏视频教程! 3、自定义录制显示区域,选定应用程序窗口或...

    maven3.6.1

    Maven3.6.1是Maven的一个版本,它在前一个版本的基础上进行了优化和改进,旨在提供更高效、稳定的项目构建环境。在这个版本中,用户可能会遇到一些新特性、性能提升以及bug修复。 1. **依赖管理**:Maven的核心功能...

    字节码实战包含class,字节码.zip

    在Java编程语言中,字节码(Bytecode)扮演着至关重要的角色,它是JVM(Java虚拟机)理解和执行程序的基础。"字节码实战"的主题深入探讨了字节码的概念、生成以及如何利用它来优化Java应用程序。下面将详细阐述相关...

    jmc8.0.0-win32.win32.x86_64.zip

    3. **Mission Control Client**:作为主界面,它将上述工具集成在一起,提供一个统一的工作台,便于用户管理和分析多个JVM实例。 **JDK 1.8的关键特性** 1. **Lambda表达式**:引入了函数式编程概念,允许开发者以...

    JAVA2深度历险.

    首先,Java是一种面向对象的语言,它的类、对象、接口和继承等概念是学习的基础。深入理解这些概念,可以帮助我们设计出更符合面向对象原则的代码结构。 其次,`javac`是Java的编译器,它将源代码编译成字节码,这...

    图片压缩器-jpg压缩-PDF压缩,包含源代码

    2. jmv1.py:根据命名,可能是对jpg图片进行处理的脚本,"jmv"可能代表“jpg manage”或者“jpg modify”,具体功能可能包括压缩、重命名或者其他图像操作。 3. pdf_jpg_new.py:这个文件名暗示了它可能涉及到将PDF...

    Packt.MySQL.for.Python

    - **ISBN编号**:提供书籍的国际标准书号(ISBN 978-1-849510-18-9)。 **知识点7:编审与制作团队** - **作者**:Albert Lukaszewski。 - **审稿人**:包括Swaroop CH、Andy Dustman、Geert JMV Vanderkelen等多...

    武汉工程大学物理练习册答案1

    由于速度方向改变,动量的方向也会改变,因此增量不为零,选(B)jmv2。 2. **圆锥摆的冲量**: - 圆锥摆摆球在轨道上运动半周,重力冲量等于重力所做的功除以重力加速度,选(C)vRmg/。 3. **变力作用下的直线运动*...

    超级解霸播放软件

    强大的解压VCD/DVD播放器,支持RM/RMVB/MOV/SWF/MP3/WMA等目前Windows流行的音视频格式的播放。...JMV视频加密技术,实现视频文件的密码加密,预览等多种应用。----骨灰级的,,1990-2002年开始上网的朋友的怀旧

    行业调查-中国铜包线市场现状及未来发展趋势.doc

    铜包线市场的主要生产商包括国际和本土企业,如Sandvik AB、The Elektrisola Group、Fujikura、Kris-Tech Wire、JMV LPS Limited、General Clad、CopperClad、PVS N.V.、Shibata、Copperhead Industries、LEONI ...

    Eclipse配置dubbo.xsd,解决标签不识别的问题

    在Java开发领域中,Eclipse作为一款广受欢迎的集成开发环境(IDE),为开发者提供了丰富的功能和便捷的操作方式。然而,在处理某些特定框架或技术栈时,可能会遇到一些配置上的难题。比如,在使用Dubbo框架时,不少...

    Android-App-Download-Image-from-the-url:Android应用程序可从URL下载图像

    1. **Volley库**:Volley是Google推出的一个网络请求库,它专注于速度和易用性。要使用Volley下载图像,首先需要在项目中引入Volley库。然后,你可以创建一个RequestQueue实例,并使用ImageView的占位符和加载器来...

Global site tag (gtag.js) - Google Analytics