java虚拟机
来源:互联网 发布:进销存数据库设计 编辑:程序博客网 时间:2024/05/01 16:25
1、java文件执行流程
Java代码编译是由Java源码编译器来完成,也就是Java代码到JVM字节码(.class文件)的过程。
Java字节码的执行是由JVM执行引擎来完成
Java代码编译和执行的整个过程包含了以下三个重要的机制
1、Java源码编译机制
①分析和输入到符号表
②注解处理
③语义分析和生成class文件
最后生成的class文件由以下部分组成:
①结构信息:包括class文件格式版本号及各部分的数量与大小的信息
②元数据:对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池
③方法信息:对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息
2、类加载机制
JVM的类加载是通过ClassLoader及其子类来完成的
3、类执行机制
JVM执行class字节码,线程创建后,都会产生程序计数器(PC)和栈(Stack),程序计数器存放下一条要执行的指令在方法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是有局部变量区和操作数栈两部分组成,局部变量区用于存放方法中的局部变量和参数,操作数栈中用于存放方法执行过程中产生的中间结果。
2、java运行时区详解
所有线程共享的内存空间
堆空间:JVM规范中规定,所有对象实例以及数组都要在堆上进行分配。一般来说,堆空间都有一个默认大小,取决于JVM实现,而且可以根据需要动态扩展。当创建对象需要在堆上分配空间,而且堆本身的空间不够也无法申请额外的内存空间,则会抛出OutOfMemoryError异常。
方法区:存储已被JVM加载的类信息、方法信息、常量和静态变量等数据。方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。静态域和常量池(Runtime Constant Pool)就是方法区的一部分。
每个线程独有的内存空间
PC程序计数器:一块较小的内存空间,每个线程都一个程序计数器,用来表示线程当前需要执行的Java指令地址。
虚拟机栈空间:JVM在执行一个线程的方法时,会为这个线程方法创建一个栈帧(可以理解为JVM栈空间中的一段存储区域)。这个栈帧用于存储局部变量表、操作数栈、动态链接和方法入口信息。
本地方法栈空间:跟虚拟机栈空间类似,只是用来存储本地方法调用的相关信息。
3、堆内存重点介绍
堆内存=Young(新生代,占1/3)+Old(年老代,占2/3)。
新生代=Eden+Survivor(from)+Survivor(to)。比例为:8:1:1。
1、new的对象都是在Eden区。
2、过段时间执行GC后存活下来的会被放到Survivor(from)区。
3、再过段时间GC执行的时候如果Survivor(from)区满了就讲Survivor(from)存活下来的复制到Survivor(to),一直轮换复制,这就是为什么需要两个Survivor区。
4、继续执行GC,Survivor存活下来的会放到Old区。
4、垃圾回收机制
1:停止-复制(stop and copy)。效率低,需要的空间大,优点,不会产生碎片。Young使用的就是这种算法。
2:标记 - 清除算法 (mark and sweep)。主要是首先标记出所有需要回收的对象,然后回收所有需要回收的对象。速度较快,占用空间少,标记清除后会产生大量的碎片。Old使用的是这种算法。
5、虚拟机调优
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- JAVA虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- java虚拟机
- java虚拟机
- Java虚拟机
- Java虚拟机
- 【HDFS】hadoop2.x HDFS javaAPI
- Android 自定义加载框
- OC当中的深拷贝和浅拷贝
- 圈子金融的weex领悟 - weex-start
- Analysis of 【Dropout】
- java虚拟机
- 【mapreduce】hadoop2.x—mapreduce实战和总结
- Java高并发,如何解决,什么方式解决
- 使用swoole实现生产者消费者模型(2)
- poj1751
- Android ADB命令的使用
- HDU1010 Tempter of the Bone (DFS & 奇偶剪枝)
- 【PAT】1096. Consecutive Factors
- android studio 自定义皮肤主题 ColorThemes