与平台无关
Java语言的一个重要特性就是与平台无关性。JVM是实现这一技术的关键。
JVM对类的加载机制请参考 Java 类加载器的工作机制
堆和栈的区别
jvm 中堆和栈属于不同的内存区域。栈区用于存放方法帧和局部变量,堆区用于存放对象,也就是对象分配在堆上。栈区比较小,但是速度快,栈区数据不在多线程之间存在共享,堆是被整个JVM所有的线程共享的。
JVM内存分配
1、基本类型数据变量和对象的引用都是在栈上分配的
2、堆内存用来存放new的对象和数组
3、类变量(static修饰的变量),程序在第一次加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
4、实例变量:当new对象的时候,系统在堆中为其开辟不一定是连续的空间分配给变量,是根据零散的堆内存地址,通过哈希算法换算为一串数字来表示这个变量在堆中的物理位置,实例变量的生命周期———当实例变量的引用失去后,将会被GC列入可回收名单列表,但并不是立即释放堆中内存
5、局部变量:因为其声明在方法中或者某段代码里,执行他的时候会在栈中开辟内存,当局部变量一但脱离作用域,内存立即释放