JVM
糖醋豆沙
这个作者很懒,什么都没留下…
展开
-
JVM内存分配与垃圾回收
1.JVM内存分配与回收上图所示的 eden 区、s0("From") 区、s1("To") 区都属于新生代,tentired 区属于老年代。大对象(需要大量连续内存空间的对象(比如:字符串、数组))直接进入老年代:为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s...原创 2020-03-03 23:46:18 · 172 阅读 · 0 评论 -
对象的访问定位
建立对象就是为了使用对象,我们的Java程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式有虚拟机实现而定,目前主流的访问方式有①使用句柄和②直接指针两种: 句柄:如果使用句柄的话,那么Java堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息;息 直接指针:如果使...转载 2020-03-03 18:29:29 · 239 阅读 · 0 评论 -
对象的内存布局
在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding)。也就是说 JAVA对象 = 对象头 + 实例数据 + 对象填充一、对象头:对象头由两部分组成,一部分用于存储自身的运行时数据哈希码、GC分代年龄、锁状态标志等等),称之为 Mark Word, 一部分是类型指针,及对象指...转载 2020-03-03 17:44:30 · 92 阅读 · 0 评论 -
对象的创建
3.1 对象的创建①类加载检查:虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。②分配内存:在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存...转载 2020-03-03 17:28:46 · 110 阅读 · 0 评论 -
类的加载连接与初始化过程详解
类型的加载、连接与初始化过程,都是在程序运行期间完成的加载:最常见为将硬盘的class文件加载到内存中 查找并加载类的二进制数据连接:将类与类之间的关系确定好并对字节码的处理、验证、校验等,类与类之间的调用等 -验证:确保被加载的类的正确性 -准备:为类的静态变量分配内存,并将其初始化为默认值 -解析:把类中的符号引用...原创 2020-03-03 12:03:27 · 309 阅读 · 0 评论 -
String和常量池
查看常量池方法,在终端中输入,其中test为类名javap -verbose test上述命令看到的内容解析:https://www.cnblogs.com/qingfengyiran-top1/p/11300654.html直接使用双引号声明出来的 String 对象会直接存储在常量池中。 如果不是用双引号声明的 String 对象,可以使用 String 提供的 inter...原创 2020-03-03 11:46:56 · 220 阅读 · 0 评论 -
Java运行时数据区域
主要参考:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/jvm/Java%E5%86%85%E5%AD%98%E5%8C%BA%E5%9F%9F.md#%E5%85%AC%E4%BC%97%E5%8F%B7 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第二版》 Java 虚拟机在执行 Java 程序...转载 2020-03-03 10:52:55 · 400 阅读 · 0 评论