Java虚拟机
JVM虚拟机基础知识点
Linleslie
这个作者很懒,什么都没留下…
展开
-
(五)Class类文件结构
Class类文件结构 注意一下讲解都是基于该Class文件结构; 任何一个Class文件都对应着一个类或者接口的定义信息; Class文件是一组以8位字节为基础单位的二进制流; Class文件存储结构:只有两种数据类型:无符号数和表 无符号数 无符号数属于基本数据类型:以u1、u2、u4、u8来代表一个字节、两个字节、三个字节、四个字节的无符号数 作用:可以用来描述数量值、索引引用、数字或者按照utf-8编码构成的字符串值; 表 是由无符号数和其他表作为数据项构成的复合数据类型,所有表都一般以"_info原创 2020-07-17 15:35:20 · 262 阅读 · 0 评论 -
(四)内存分配与回收策略
#内存分配与回收策略 # 一般情况对象分配在新生代的eden区,当eden区没有足够的内存进行分配时,虚拟机将发起一次minor GC(新生代GC) 大对象直接进入老年代;虚拟机提供了一个参数-XX:pretenureSizeThreshold,当创建的对象大于该阀值,该对象将直接在老年代分配(目的:避免eden区和两个survivor区大量的复制操作);注意:该参数只对serial和parNew虚拟机有用 长期存活的对象进入老年代;(eden区创建分配的对象,经过第一次Minor GC仍然活着并且sur原创 2020-07-17 15:34:34 · 136 阅读 · 0 评论 -
(三)垃圾收集器和内存分配策略
(三)垃圾收集器和内存分配策略 判断对象存活算法 1、引用计数法 给对象添加一个引用计数器,当一个地方引用该对象时,计数器加1,当引用失效时,计数器减1;当计数器为0时,该对象就会被回收; 缺陷:当两个对象互相引用时,导致其计数器不为0,实际上对象已经不再被使用,从而无法被GC回收; ObjA.instance=ObjB; ObjB.instace=objA; 虽然此时,这两个对象已经无任何引用,实际上着两个对象,已经无法被访问了,但他们query彼此持有对方引用,导致计数器部位0; [外链图片转存失败,原创 2020-07-17 15:33:35 · 149 阅读 · 0 评论 -
(二)对象创建、布局、访问
对象在堆中 1.创建对象 这里的对象(指普通对象,不包括数组、Class对象等); 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一***个类的符号引用***,并且检查这个符号引用代表的类是否被加载、解析、或初始化过,没有先执行类加载过程,接下来为对象分配内存,并执行方法为字段赋初始化值; 2. 对象在java堆内存中的布局 对象在内存中存储的布局分为:对象头、实例数据、对齐填充; 对象头:包括两部分(1)、存储对象自身的运行时数据(如:哈希码、GC分代年龄、锁状态标志、线程持原创 2020-07-17 15:32:07 · 126 阅读 · 0 评论 -
(一)java内存区域
java内存区域 java虚拟机在执行java程序的过程会把管理的内存划分为不同的数据区域; java虚拟机管理的内存包含以下运行时数据区域: 程序计数器(线程私有) java虚拟机栈(线程私有) 方法区 堆 本地方法栈(线程私有) 线程私有的运行时数据区域随着线程的启动、结束而建立、销毁;而共享内存区域随着虚拟机进程的启动而存在; 1. 程序计数器 是一块较小内存空间,可以看做当前线程所执行的字节码的行号指示器; java虚拟机的多线程是通过轮流线程切换并分配处理器执行时间的方式实现的。任何时刻,一原创 2020-07-17 15:31:33 · 150 阅读 · 0 评论