太原网站开发定制,兰州旅游攻略,哪个网站建网页比较好,网站建设中的安全问题1.JVM的内存分区
1.1方法区
方法区(永久代#xff09;主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的。
1.2虚拟机栈
虚拟机栈也就是我们平时说的栈内存#xff0c;它是为java方法服务的。每个方法在执行的…1.JVM的内存分区
1.1方法区
方法区(永久代主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的。
1.2虚拟机栈
虚拟机栈也就是我们平时说的栈内存它是为java方法服务的。每个方法在执行的 时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接和方法出口等信息。虚拟机栈是线程私有的它的生命周期与线程相同。
1.3本地方法栈
本地方法栈和虚拟机栈类似只不过本地方法栈为 Native 方法服务
1.4堆
java 堆是所有线程所共享的一块内存在虚拟机启动时创建几乎所有的对象实例都在这里创建因此该区域经常发生垃圾回收操作。堆区由可划分为新生代、老年代和元空间三个区域。新生代是所有java对象出生的地方也是垃圾回收最频繁的区域新生代的对象大多都朝生夕灭且Eden区和From、To区三个的比例为811。老年代是存储被长期使用的对象元空间存储一些方法中操作的临时对象。 1.5程序计数器
内存空间小字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数 器完成。该内存区域是唯一一个 java 虚拟机规范规定不会抛 OOM 错误的区域OOMOut Of Memory,内存用完。
2.内存的回收策略
对象优先在Eden区分配大对象由于需要大量连续的内存因此直接进入老年代长期存活的对象直接进入老年代
3.垃圾收集方式
GC是garbage collection的缩写意思是垃圾回收把堆内存中不再使用的空间释放掉清理不再使用的对象。
内存泄露对象不被使用且没有被回收
内存溢出申请内存时没有足够内存使用
3.1从范围上可划分为
Minor GC:发生在新生代的垃圾收集动作Major GC: 回收老年代垃圾Full GC:收集整个java堆和方法区的垃圾
3.2具体的垃圾收集算法
(1)复制算法
Minor GC一般就是使用复制算法具体过程就是把存活的对象复制到另外一块区域然后把原来区域所有对象全部清除。
优点效率高 缺点需要内存容量大比较耗内存适用于占用空间小、刷新次数多的新生区
(2)标记清理
具体操作就是将未使用的对象进行标记然后回收。但是收集效率比较低且容易产生内存碎片。
(3)标记整理
标记整理就是在标记清理的基础上将内存碎片进行整理虽然不会产生碎片但是需要移动对象导致效率低速度慢。并且标记整理一般会和标记清理混合使用在老年代用于回收垃圾。
总的来说java回收垃圾采用了分区分代回收思想。
4.垃圾的判定
如何判定在内存中哪些对象是垃圾
4.1引用计数器
简单来说就是看一个对象还有没有人用它。有地方用它计数器加一用完了计数器减一如果一个计数器为0说明是个死对象就可以被回收了。有个缺陷就是无法解决循环引用问题就是A引用了B,B也引用了A直接套娃上了计数器都为1无法进行垃圾回收所以主流虚拟机一般不用这种算法
4.2可达性算法 从GCroot到一个对象间没有可到达的路径则认为该对象不可访问就可以进行垃圾回收比如obj5和obj6
哪些对象可以作为GC Roots:
栈中引用的对象类静态属性引用的对象常量引用的对象Native方法引用的对象