随笔分类 -  JVM

摘要:类加载过程中每个步骤的顺序 我们已经知道,类加载的过程包括:加载、连接、初始化,连接又分为:验证、准备、解析,所以说类加载一共分为5步:加载、验证、准备、解析、初始化。 其中加载、验证、准备、初始化的开始顺序是依次进行的,这些步骤开始之后的过程可能会有重叠。 而解析过程会发生在初始化过程中。 类加载 阅读全文
posted @ 2016-10-03 15:15 wade&luffy 阅读(666) 评论(0) 推荐(0) 编辑
摘要:对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,但不止如此,它还可以做任何它想做的事情。 本地方法本质上时依赖于实现的,虚拟机实现的设计者 阅读全文
posted @ 2016-08-27 20:36 wade&luffy 阅读(24280) 评论(2) 推荐(4) 编辑
摘要:为了展示虚拟机如何使用方法区中的信息,下面来举例说明: 不同的虚拟机实现可能会用完全不同的方法来操作,下面描述的只是其中一种可能——但并不是仅有的一种。 要运行Volcano程序,首先得以某种“依赖于实现的”方式告诉虚拟机“Volcano”这个名字。之后,虚拟机将找到并读入相应的class文件“Vo 阅读全文
posted @ 2016-08-27 20:24 wade&luffy 阅读(697) 评论(0) 推荐(0) 编辑
摘要:在JAVA虚拟机中,负责查找并装载类型的那部分被称为类装载子系统。 JAVA虚拟机有两种类装载器:启动类装载器和用户自定义类装载器。前者是JAVA虚拟机实现的一部分,后者则是Java程序的一部分。由不同的类装载器装载的类将被放在虚拟机内部的不同命名空间中。 类装载器子系统涉及Java虚拟机的其他几个 阅读全文
posted @ 2016-08-27 20:03 wade&luffy 阅读(1262) 评论(0) 推荐(0) 编辑
摘要:Java虚拟机是通过某些数据类型来执行计算的,数据类型可以分为两种:基本类型和引用类型,基本类型的变量持有原始值,而引用类型的变量持有引用值。 Java语言中的所有基本类型同样也都是Java虚拟机中的基本类型。但是boolean有点特别,虽然Java虚拟机也把boolean看做基本类型,但是指令集对 阅读全文
posted @ 2016-08-27 19:55 wade&luffy 阅读(1138) 评论(0) 推荐(0) 编辑
摘要:Trace跟踪参数 -verbose:gc -XX:+printGC 打印GC的简要信息 -XX:+PrintGCDetails 打印GC详细信息 -XX:+PrintGCTimeStamps 打印CG发生的时间戳 -Xloggc:log/gc.log 指定GC log的位置,以文件输出 XX:+T 阅读全文
posted @ 2016-08-09 19:18 wade&luffy 阅读(466) 评论(0) 推荐(0) 编辑
摘要:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的规则: 全盘负责,当一个类加载器负责加载某个Class时,该Class所依赖的和引用的其他Class也将由该类加载器负责载入,除非显示使 阅读全文
posted @ 2016-08-09 18:40 wade&luffy 阅读(518) 评论(0) 推荐(0) 编辑
摘要:新生代中的98%对象都是“朝生夕死”的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分为一块比较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地复制到另外一块Survivor空间上, 阅读全文
posted @ 2016-08-09 15:43 wade&luffy 阅读(547) 评论(0) 推荐(0) 编辑
摘要:GC的概念 GC:Garbage Collection 垃圾收集。这里所谓的垃圾指的是在系统运行过程当中所产生的一些无用的对象,这些对象占据着一定的内存空间,如果长期不被释放,可能导致OOM(堆溢出)。 内存区域中的程序计数器、虚拟机栈、本地方法栈这3个区域随着线程而生,线程而灭;栈中的栈帧随着方法 阅读全文
posted @ 2016-08-09 15:19 wade&luffy 阅读(1734) 评论(1) 推荐(0) 编辑
摘要:每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈。Java栈以帧为单位保存线程的运行状态。虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈和出栈。 某个线程正在执行的方法被称为该线程的当前方法,当前方法使用的栈帧称为当前帧,当前方法所属的类称为当前类,当前类的常量池称为当前常量 阅读全文
posted @ 2016-08-09 14:16 wade&luffy 阅读(7731) 评论(0) 推荐(1) 编辑
摘要:首先,当一个程序启动之前,它的class会被类装载器装入方法区,执行引擎读取方法区的字节码自适应解析,边解析就边运行(其中一种方式),然后pc寄存器指向了main函数所在位置,虚拟机开始为main函数在java栈中预留一个栈帧(每个方法都对应一个栈帧),然后开始跑main函数,main函数里的代码被 阅读全文
posted @ 2016-08-09 13:57 wade&luffy 阅读(727) 评论(0) 推荐(0) 编辑
摘要:观察控制台输出和任务管理器的javaw.exe会发现,当main函数的for循环打印完的时候,程序居然没有退出,而等到整个new Thread()里的匿名类的run方法执行结束后,javaw.exe才退出。 我们知道在c++的win32编程(CreatThread()),main函数执行完了,寄宿线 阅读全文
posted @ 2016-08-09 13:19 wade&luffy 阅读(582) 评论(0) 推荐(0) 编辑
摘要:JVM工作原理和特点主要是指操作系统装入JVM,是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类。 一.JVM 阅读全文
posted @ 2016-08-09 11:38 wade&luffy 阅读(415) 评论(0) 推荐(1) 编辑
摘要:什么是Java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可 阅读全文
posted @ 2016-08-09 11:27 wade&luffy 阅读(715) 评论(1) 推荐(2) 编辑

点击右上角即可分享
微信分享提示