木制家具东莞网站建设,建行企业银行app官方下载,100m做电影网站,陕西通达工程建设有限公司网站Native 凡是带了native关键字的#xff0c;说明Java的作用范围的达不到了#xff0c;需要调用底层C语言的库 调用native方法#xff0c;会进入本地方法栈#xff0c;调用本地接口(JNI) JNI的作用#xff1a;扩展Java的使用#xff0c;融合不同的编程语言为Java所用 它在内…Native 凡是带了native关键字的说明Java的作用范围的达不到了需要调用底层C语言的库 调用native方法会进入本地方法栈调用本地接口(JNI) JNI的作用扩展Java的使用融合不同的编程语言为Java所用 它在内存区域中专门开辟了一块标记区域Native Method Stack本地方法栈登记native方法 在最终执行的时候加载本地方法库中的方法通过JNI 调用其他接口Socket、WebService、http
PC寄存器
程序计数器Program Counter Register
每个线程都有一个程序计数器是线程私有的就是一个指针指向方法区中的字节码用来存储指向一条指令的地址也即将要执行的指令代码在执行引擎读取下一条指令是一个非常小的内存空间几乎可以忽略不计。
方法区
Method Area
方法去是被所有线程共享所有字段和方法字节码以及一些特殊方法如构造函数接口代码也在此定义简单说所有定义的方法的信息都保存在该区域此区域属于共享空间
静态变量、常量、类信息构造方法、接口定义、运行时的常量池存在方法区中但是实例变量存在堆内存中和方法区无关
栈
栈内存主管程序的运行生命周期和线程同步
线程结束栈内存也就释放了对于栈来说不存在垃圾回收问题。
栈中存放8大基本类型对象引用实例的方法
栈运行原理栈帧
栈满了StackOverflowError
栈堆方法区交互关系
三种JVM
Sun公司 HotSpotBEA JRockitIBM J9VM
堆
Heap一个JVM只有一个堆内存堆内存的大小是可以调节的。
类加载器读取了类文件后一般会把什么东西放到堆中类实例方法常量变量。 保存我们所有引用类型的真实对象
堆内存中还要细分为三个区域
新生区伊甸园区老年区永久区
新生区、老年区、永久区
新生区伊甸园区分为三个部分伊甸园区、幸存0区、幸存1区。新生对象出生在伊甸园区在经过GC垃圾回收器一次淘汰筛选过后会进入幸存0区或幸存1区。幸存0区与幸存1区经常互换位置使其中的数据也会经常互换位置GC也会对幸存区进行垃圾回收。等经过GC多次淘汰过后剩下的数据可以进入老年区当老年区满了之后GC将会来一次大清洗即重GC清除许多数据。GC垃圾回收主要是在伊甸园区和老年区
假设内存满了则会爆出OOM堆内存不够 java.lang.OutOfMemoryError:java heap space
在JDK8以后永久存储区改了个名字 ---------------- 元空间
新生区
类诞生成长甚至死亡的地方新生区分为伊甸园区幸存者区01伊甸园区所有类的实例对象都是在伊甸园区new出来的。如果伊甸园区满了则GC将会开启清除行动清除完毕后幸存的对象将会移到幸存者区
老年区
当幸存区中一个对象经历15次GC默认值还没死的时候该对象将会进入老年区可以设置这个参数通过VM option 添加-XX:MaxTenuringThreshold9999如何设置VM option 看堆内存调优设置一个对象需要经历9999次GC才能进入老年区当幸存者区与伊甸园区都满了的时候则会触发重GC即GC会开启重清除行动将伊甸园区与幸存者区皆清除一遍剩下的对象将会进入老年区当老年区幸存区伊甸园区都满了的时候则会触发OOM。不过所幸的是经过研究发现99%的对象都是临时对象活不到老年区。
永久区
这个区域常驻内存的用来存放JDK自身携带的Class对象Inteface元数据总的来说存储的是Java运行时的一些环境或类信息这个区域不存在垃圾回收。关闭虚拟机就会释放这个区域的内存
方法区常量池在永久区里
一个启动类加载了大量的第三方jar包、tomact部署了太多的应用、大量动态生成的反射类不断地被加载直到内存满就会出现OOM
JDK1.6之前永久代常量池是在方法区JDK1.7 也有永久代但是慢慢退化了提出去永久代常量池在堆JDK1.8之后无永久代常量池在元空间 元空间逻辑上存在物理上不存在