JVM内存结构java
项目中的数据是怎么运行的呢?程序员
java文件编译后运行就变成了class文件spa
class文件经过类加载器存入内存空间中对象
内存空间:内存
方法区:保存了static和class的信息 ,且在方法区中是永久保存的,垃圾回收机制(GC)是不会回收的资源
堆:通常由程序员分配释放,保存了new出来的信息,在堆中垃圾回收机制(GC)是会回收的开发
堆内存中又分为新生代和老生代编译器
新生代:不常用的对象存在的地区(GC回收的次数比较多的)编译
eden:当new出来的时候就会在eden中,也是GC常常回收的一个区class
注:S1和S2功能是同样的,大小也是同样的
S1(from):new出来后一段时间就会保存在这里
S2(to):new出来后一段时间就会保存在这里
老年代: 常用的对象存放的地区 (GC回收的次数比较少的)
当你常用一个对象的时候,就会自动的保存到老年代
栈:由编译器自动分配释放,保存了临时信息,即便用的方法,在栈中会自动释放资源,
常见问题:栈内存会不会内存溢出呢?
答案: 会的,例如死循环或者在类中调用本类,它们会一直循环知道大于栈内存的深度就会内存溢出
本地方法栈:在安卓开发中底层是c语言,本地方法栈表示用java调用c语言
垃圾回收机制(gc):回收堆内存中的数据