虚拟机
文章平均质量分 65
川川~
剪水行舟
展开
-
浅析Java中创建对象的过程
前言当Java程序中使用new 创建对象时,类加载机制会检查这个类是否被加载过(类加载机制可以看一下另一篇文章《Android中ClassLoader双亲委托机制》),如果没被加载过会执行对象的创建过程,流程图如下类加载一个Java程序,会通过javac编译成class文件,然后通过虚拟机加载到方法区检查加载检查 new 这个指令的参数是否能在常量池中定位到一个类的 符号引用,并检查类是否已经被加载、解析和初始化过。分配内存JVM为对象分配内存。相当于把一块确定大小的内存从堆中划分出来。分配原创 2020-07-30 17:03:32 · 184 阅读 · 0 评论 -
垃圾回收器如何判断对象的“存活”,以及类何时回收
前言在垃圾回收器回收堆里面的对象的时候,需要判断对象是否还被其它地方使用,此时的状态我们可以比作对象是“存活”的,如果对象没有被其它地方使用,就回被垃圾回收器回收。如何判断对象是否是“存活”的呢?有两个方法:引用计数法和可达性分析...原创 2020-07-30 14:51:14 · 286 阅读 · 0 评论 -
Java中对象到底存在堆中还是栈中
创建一个对象的时候,到底是在栈中分配还是在堆中分配需要看2个方面:对象类型和在Java中存在的位置1.如果是基本数据类型,byte、short、int、long、float、double、char,如果是在方法中声明,则存储在栈中,其它情况都是在堆中(比方说类的成员变量就在堆中);2.除了基本数据类型之外的对象,JVM会在堆中创建对象,对象的引用存于虚拟机栈中的局部变量表中3.并不是所有的对象都在堆中存储,可以走栈上分配,在不在栈上分配取决于Hotspot的一个优化技术:“逃逸分析”一般JVM 执行原创 2020-07-30 14:50:02 · 13863 阅读 · 1 评论 -
虚拟机篇 --- 浅谈JVM内存结构
目录前言JVM运行时数据区(内存区域划分)虚拟机栈局部变量表操作数栈动态连接返回地址/完成出口本地方法栈程序计数器前言Java引以为傲的就是其内存管理机制,相比C++的手动内存管理、复杂难以理解的指针等,Java程序写起来方便的多。本文中所说的JVM均是HotSpot版本JVM运行时数据区(内存区域划分)Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,包括:虚拟机栈(VM Stack)本地方法栈(Native Method Stack)程序计数器(Pro原创 2020-07-30 14:48:43 · 136 阅读 · 0 评论