JVM
kerer-sk
这个作者很懒,什么都没留下…
展开
-
java对象创建过程
1、对象创建的整个流程:step1: 当虚拟机遇到一个new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。step2: 类加载检查过后,方法信息、常量、静态变量等保存在一块称为方法区的内存中,接下来虚拟机将为新生对象分配内存。对象所需内存大小在类加载完成后便可以完全确定,为对象分原创 2017-06-13 22:07:19 · 1093 阅读 · 0 评论 -
gc日志打印
eclipse启动gc日志打印需要在eclipse.ini文件中配置(eclipse根目录下)1、在eclipse.ini配置文件中添加以下参数: -verbose:gc (开启打印垃圾回收日志) -Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) -XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式) -XX:+Pri原创 2017-08-29 17:06:04 · 1186 阅读 · 0 评论 -
java虚拟机垃圾回收
1、概述1)、java虚拟机的垃圾回收(Garbage Collection,GC)主要解决三个问题:有哪些内存是需要回收?什么时候进行回收?如何进行回收?2)、然后是垃圾回收器的工作区域:一般情况程序计数器、虚拟机栈和本地方法栈三个区域随线程生灭,这几个区域的内存分配回收都是确定的。所以垃圾回收器主要工作区域在堆和方法区以下内容先从原理上来说明如何解决这三个问题,最后介绍实际中的垃圾回收器原创 2017-08-29 18:29:05 · 530 阅读 · 0 评论 -
虚拟机字节码的执行
虚拟机栈栈帧栈帧:虚拟机栈中的每个栈帧对应着每个方法,是进行方法调用和方法执行的数据结构,每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里边从入栈到出栈的过程。一个栈帧包含的内容(注意:这个只是概念模型,实际存储不太一样):局部变量表:主要存储局部变量操作栈:方法具体执行过程,如两个局部变量相加动态连接:一个指向运行时常量池中该栈帧对应的所属方法的引用返回地址:方法返回调用位原创 2017-09-16 12:20:41 · 342 阅读 · 0 评论 -
java方法调用原理——虚拟机中方法调用
为了更加深入的理解方法的覆盖和覆写原理需要了解java方法的调用原理首先解释一下方法调用: 方法调用不等同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即确定具体调用那一个方法),不涉及方法内部具体运行。java虚拟机中提供了5条方法调用的字节码指令:invokestatic:调用静态方法invokespecial:调用实例构造器<init>方法、私有方法、父类方法invokev原创 2017-09-16 15:02:03 · 3292 阅读 · 3 评论 -
Java内存分配
1、运行时数据区域java虚拟机在执行java程序的过程中会把它管理的内存划分若干个不同的数据区域。这些区域有各自的用途以及创建和销毁的时间。 运行时数据区域主要有:程序计数器虚拟机栈本地方法栈方法区堆1. 程序计数器功能:指示当前执行的字节码地址,可以看做当前线程执行的字节码的行号指示器。 java多线程中,任何一个确定时刻,一个处理器都会只执行一条程序指令。为了线程切换后能恢复正原创 2017-06-13 17:54:50 · 306 阅读 · 0 评论 -
JVM类加载机制
概述虚拟机把描述类的数据的Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。java语言里,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供高度灵活性。1、类加载的时机类从被加载到内存中开始,到卸载出内存为止,他的整个原创 2017-08-31 15:32:23 · 516 阅读 · 0 评论 -
java中引用的用法
java中引用分为四种强度:强引用,软引用、弱引用、虚引用强引用:就是像Object obj = new Object()这种引用;软引用:SoftReference类来实现只有当内存快要溢出时才会回收这部分内存,经常应用在缓存技术中。可以关联一个引用队列,当出现溢出时JVM回收这部分内存后,会将这个引用放入这个关联的引用队列。 // 软引用 public static void tes原创 2017-08-30 11:57:05 · 670 阅读 · 0 评论