做农村网站多少钱,青岛新闻,淘宝网站是怎么做的,杭州企业如何建网站什么是JVM
1.JVM#xff1a;
JVM其实就是运行在 操作系统之上的一个特殊的软件。 2.JVM的内部结构#xff1a; #xff08;1#xff09;因为栈会将执行的程序弹出栈。 #xff08;2#xff09;垃圾99%的都是在堆和方法区中产生的。 类加载器#xff1a;加载class文件。…什么是JVM
1.JVM
JVM其实就是运行在 操作系统之上的一个特殊的软件。 2.JVM的内部结构 1因为栈会将执行的程序弹出栈。 2垃圾99%的都是在堆和方法区中产生的。 类加载器加载class文件。
类是模板是抽象的只有一个。但是对象是具体的 类加载器的类型
虚拟器自带加载器
启动类根加载器
扩展类加载器
用户类加载器 找类加载器会一层一层的往上找
双亲委派机制为了安全
其原理是类加载器的查找顺序是按照这样的方式执行的用户类加载器- 扩展类加载器- 启动类加载器 最终执行。
如果在启动类加载器和扩展类加载器中都找不到类就会反过来找即 启动类加载器- 扩展类加载器- 用户类加载器。如果都找不到的话就会抛出异常通知子类进行加载。
沙箱安全机制为了安全
组成字节码校验器、类装载器使用的是双亲委派机制。 Native
带有native的关键字说明java的作用达不到了需要调用底层C语言库进入本地方法栈。然后本地方法栈调用本地方法接口进而调用本地方法库。 程序计数器 线程私有的就是一个指针用于指向方法区中字节码。
方法区:
静态变量static、常量、类信息以及运行时常量池都放在方法区中。实例化变量存在堆内存中于方法区无关。
栈
一种数据结构先进后出。一旦线程结束栈就结束了。 三种JVM
HotSpot
BEA
J9VM JIE 堆
类加载器读取类文件后一般在堆中存放引用对象的实例对象具体是包含类、方法、常量、变量。
堆中分区
新生区分为伊甸园区所有new的对象实例化都是在该区和幸存者区 from 和to 它们是可以相互之间进行转化的。
如果伊甸园区满了就进行轻度垃圾回GC收伊甸园区如果有存活下的对象就进入幸存者区。当幸存者区和伊甸园区都满了就会进行一次重度垃圾回收full GC存活下来的程序进入老年区。
如果新生区和老年区都满了就会出现内存溢出的现象OOM的现象。
老年区永久区
jDK1.6之前永久代常量放在方法区中
JDK1.7 永久代但是逐渐退化
JDK1.8 去除永久代使用元空间代替。逻辑上存在实际物理层不存元空间
永久区一般存放JDK自身携带的Class对象、interface接口数据、存储java运行时的一些环境和类信息。这个区不存在垃圾回收。 JDK1.8以前的
轻度垃圾回收GC
重度垃圾回收full GC JVM分配的总内存是电脑内存的1/4初始化内存大概是1/64。
如果堆出现OOM的情况试着给堆空间分配更大的的内存。如果还报错就查找代码的错误。
3.GC 介绍和引用计数
GC的作用区域 4.GC 的算法
1. 引用计数器
引用计算器给每个对象加一个计算器每调用一次就计数加1。没有使用的话就直接清除。缺点是需要占用额外的空间去计数。 2. 复制算法
复制算法(年轻代主要用的是复制算法)将幸存区from 的内容复制到幸存区to那边此时幸存区from和幸存区to的角色会互换。当对象经历了15GC还没被清除就会进入养老区。 每次GC后幸存区to是空的。
好处是没有碎片。
缺点是浪费空间因为幸存区(to) 是
空的。 MaxTenuringThreshold参数讲解 最大任期
在GC回收的时候. 如下图详解 From 区和To区 会来回的复制和交换位置. 每交换一次,就会增加一次年龄. 默认交换了15次, 就会从新生代到老年代中去. 3. 标记清除法 好处是不需要额外的空间与复制算法相比
缺点是两次扫描需要时间会产生内存碎片
4. 标记压缩算法 算法再次扫描将内存的碎片进行清除。
好处是不会产生碎片。
缺点再次扫描需要时间成本。
5. 标记清除压缩算法
先标记删除等到几次再将碎片进行压缩。
总结
年轻代使用复制算法比较好因为存活率低。
老年代标记清除和标记压缩的方法比较好因为存活率低尽可能将内存碎片最小化。