
JVM虚拟机
文章平均质量分 82
xlSeeker
这个作者很懒,什么都没留下…
展开
-
Java虚拟机(一):Java内存区域与内存溢出异常
1、Java内存区域 由图可知,java运行时内存区域主要划分为6个区域,分别为程序计数器、Java虚拟机盏、本地方法盏、Java堆、方法区(内含运行时常量池)、和直接内存区(分配空间时直接在本地堆中分配)。(1)、程序计数器 线程隔离的数据区:每个线程一个独立的计数器,线程之间互不影响。 可以看成当前线程执行字节码的行号指示原创 2016-06-10 20:00:27 · 702 阅读 · 0 评论 -
Java虚拟机(二):垃圾收集器
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,在这几个区域内就不需要过多考虑垃圾回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 栈中的栈帧随着方法的进入和退出而有条不紊的执行这出栈和入栈操作。 因此虚拟机主要关注java堆和方法区的内存分配和回收。1、对象存活判定 1)引用计数算法 给对象添加一个引用计数器,每当由原创 2016-06-11 16:19:56 · 742 阅读 · 0 评论 -
Java虚拟机(六):类加载器ClassLoader
“通过一个类的全限定名来获取描述此类的二进制流”这个动作放到虚拟机外部去实现,以便让应用程序决定如何去获取所需要的类。这个动作模块就是类加载器。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后,才能被其它class所引用。所以C原创 2016-06-13 15:15:25 · 885 阅读 · 0 评论 -
Java虚拟机(七)虚拟机字节码执行引擎
在不同的虚拟机实现里面,执行引擎在执行Java代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译产生本地代码执行)两种选择,也可能两者兼备,甚至可以包含几个不同级别的编译器执行引擎。但是从外观上看,所有的Java虚拟机执行引擎都是一致的:输入为字节码文件,处理过程是字节码的解析过程,输出时是执行结果。 栈帧(stack frame)是用于支持虚拟机进行方法调用和原创 2016-06-14 09:41:52 · 442 阅读 · 0 评论 -
Java虚拟机(五):虚拟机类加载
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。不同于那些需要进行连接工作的语言,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。(1)、类加载的时机 类从被加载到虚拟机内存中开始,到卸载为止,生命周期共包括:加载、验证、准备、解析、初始化、使用和卸载原创 2016-06-13 09:27:37 · 599 阅读 · 0 评论 -
Java虚拟机(四):Class文件结构及字节码指令
一、Class文件结构 Java class文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java类或者Java接口作出了全面描述。一个class文件中只能包含一个类或者接口。1、平台无关性 尽管class文件与Java语言结构相关,但它并不一定必须与Java语言相关。如下图,可以使用其他语言来编写程序,然后将其编译为class转载 2016-06-13 09:25:13 · 2657 阅读 · 0 评论 -
Java虚拟机(三):内存分配与回收策略
对象的分配,就是在堆上,主要是新生代Eden区上分配对象空间,如果启动了本地线程分配缓冲,将按照线程优先在TLAB上分配。少数情况下也可能分配在老年代中。1、对象优先在Eden区分配 大多数情况对象在新生代Eden区分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。 VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10原创 2016-06-11 17:08:40 · 602 阅读 · 0 评论