jvm
文章平均质量分 69
一个热爱java的小白
这个作者很懒,什么都没留下…
展开
-
什么是逃逸分析
在java虚拟机中,对象是在java堆中分配内存的,这是一个普遍的常识。但是,有一种特殊情况,那就是如果经过逃逸分析(escape analysis)后发现,一个对象并没有,逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配内存,也无须进行垃圾回收了。这也是最常见的堆外存储技术。这段蓝色的代码中将创建的 sb 引用作为返回值返回,那么其它线程就有可能拿到这个变量,因为堆是所有线程共享的这就叫发生了逃逸。原创 2024-08-20 18:12:27 · 628 阅读 · 0 评论 -
有关对象实例化过程
2.1 如果堆空间是规整的就采用指针碰撞的方式分配,指针的一边是使用过的内存,指针的另一边是空闲的空间,如果分配内存就将指针往空闲的那个方向移动。2.2 如果堆空间是不规则的会采用空闲列表法分配,虚拟机会维护一个列表记载了哪些内存是空闲的,分配时从列表中找一个充足的空间存放对象。1.判断对象的对应的类是否加载,如果未加载则在双亲委派模式的机制下进行加载,如果找到则生成对应的class对象否则报错。4 初始化分配到的空间,给对象中的属性进行默认初始化。3 处理安全并发问题。5 设置对象的对象头。原创 2024-08-20 17:46:25 · 492 阅读 · 0 评论 -
jvm运行时数据区一(结合尚硅谷课程总结超详细)
即只有当前正在执行的方法的栈(栈顶栈帧)是有效的,这个栈帧被称为当前栈帧(currentframe),与当前栈帧相对应的方法就是当前方法 (currentmethod),定义这个方法的类就是当前类( 类(current class)执行引擎运行的所有字节码指令只针对当前栈帧进行操作。如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给前一个栈帧,接着,虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧。每个线程都有自己的栈,栈中的数据都是以栈帧(stack frame)的格式存在。原创 2024-08-11 23:53:30 · 159 阅读 · 0 评论