电商网站开源授权二次开发,网站建设销售是什么,如何使用网络营销策略,ui界面设计师1、JVM的位置#xff1a;JVM是在操作系统上面的应用软件JVM虚拟机有三种如下#xff1a;① Sun公司的HotSpot#xff1b; ② BEA公司的JRockit#xff1b; ③ IBM公司的J9 JVM#xff1b;java虚拟机属于第一种#xff1a;2、JVM的体系结构#xff1a;3、类…1、JVM的位置JVM是在操作系统上面的应用软件 JVM虚拟机有三种如下 ① Sun公司的HotSpot ② BEA公司的JRockit ③ IBM公司的J9 JVM java虚拟机属于第一种2、JVM的体系结构 3、类加载器 作用加载class文件 -------类是模板对象是具体的 简单执行过程 双亲委派机制 定义在程序运行时某个类加载器需要加载某个.class文件时它首先把这个任务委托给他的上级类加载器即ExtClassLoaderExtClassLoader加载器在把任务委托给他的上级类BootstrapClassLoader如果BootstrapClassLoader没有加载就到ExtClassLoader加载如果ExtClassLoader没有加载就自己加载按照这个递归这个操作来完成加载该文件的机制就称为双亲委派机制类加载器的类别 1BootstrapClassLoader启动类加载器 它是由C写的加载java核心库--java.*java/lib目录下的jar自己复制进去也会加载但是java环境会被不坏 2ExtClassLoader标准扩展类加载器 它是由java写的加载扩展库即java/lib/ext目录下的jarjava.ext.dir 指定位置中的类开发者可以直接使用标准扩展类加载器。 3AppClassLoader系统类加载器 它是由java写的加载程序所在的目录我们自己写的类大多数使用这个如user.dir所在的位置的class 4CustomClassLoader用户自定义类加载器 它是由java写的用户自定义的类加载器,可加载指定路径的class文件Tomcat实现就是有自己的加载器 双亲委派机制的作用 1、防止加载相同的class文件保证数据的安全 2、防止核心类被破坏造成java环境的污染 4、沙箱安全机制 防止远程代码病毒入侵5、native 凡是带native关键字的说明java的作用范围达不到了只能调用C语言的库会进入本地方法栈然后会调用本地接口JNIJNI作用扩展java的使用融合不同的语言为java所用最初的C、C它在内存区域中专门打开调了一块标志区域本地方法栈登记native方法 例子源码Thread的类中的----》private native void start0();6、PC寄存器 1、PC寄存器 PC register 每个线程启动的时候都会创建一个PCProgram Counter程序计数器寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 PC寄存器。PC寄存器的内容总是指向下一条将被执行指令的地址这里的地址可以是一个本地指针也可以是在方法区中相对应于该方法起始指令的偏移量。 2、每个线程都有一个程序计数器是线程私有的,就是一个指针指向方法区中的方法字节码用来存储指向下一条指令的地址,也即将要执行的指令代码由执行引擎读取下一条指令是一个非常小的内存空间几乎可以忽略不记。 3、这块内存区域很小它是当前线程所执行的字节码的行号指示器字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。 4、如果执行的是一个Native方法那这个计数器是空的。7、方法区 方法区Method Area与 Java 堆一样是所有线程共享的内存区域。 静态变量、常量、类信息构造方法、接口定义、运行时的常量池存在方法区中但是实例变量存在堆内存中和方法区无关8、栈先进后出、后进先出数据结构 定义栈stack又名堆栈它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶相对地把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈它是把新元素放到栈顶元素的上面使之成为新的栈顶元素从一个栈删除元素又称作出栈或退栈它是把栈顶元素删除掉使其相邻的元素成为新的栈顶元素。 程序数据结构算法 程序执行方法就是靠栈来调用最先把main()方法压在栈的底部其它方法在上面等到main()出栈程序执行也就结束了。 所以栈是不存在垃圾回收问题9、堆 Heap一个JVM只有一个堆内存堆内存的大小是可以调节的 类加载器读取了类文件后一般会把类、方法、常量、变量保存我们所有引用类型的真实对象 堆内存中分成三个区域 1、新生区伊甸区 2、养老区 3、永久存储区 所有GC垃圾回收是在堆里的伊甸区和养老区 jdk8后把永久区名称改为元空间 新生区 类诞生和成长的地方甚至死亡 伊甸区所有对象都是在这里new出来的即实例化 幸存区0 1 养老区 永久区这个区域常驻内存的用来存放携带的class对象interface元数据存储的是java运行时的一些环境或类信息这个区域不存在垃圾回收 jdk1.6永久代、常量池在方法区 jdk1.7永久代、但是慢慢的退化常量池在堆中 jdk1.8之后无永久代、常量池在元空间 OOM定义OOM全称“Out Of Memory”翻译成中文就是“内存用完了”来源于java.lang.OutOfMemoryError。看下关于的官方说明 Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时就会抛出这个error注非exception因为这个问题已经严重到不足以被应用处理。 遇到OOM问题 参考https://www.cnblogs.com/zhoading/p/10249302.html 1调堆内存大小 修改堆的大小 说明 -Xms20M 初始化堆内存大小 -Xmn20M 堆内存最大值 -Mmn10M 新生代内存设置 -XX:PrintGcDetails 用于打印GC的日志信息 -verbose:gc 用于查看Java垃圾收集的结果 idea界面 2分析内存 分析堆内存工具MATeclipse、Jprofileridea MAT、Jprofiler作用快速分析Dump内存文件快速定位内存泄漏 VM参数https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html 要在idea安装插件Jprofiler 1安装https://www.cnblogs.com/javabg/p/11499098.html 2使用https://segmentfault.com/a/119000002188133110、GC垃圾回收 GC的作用区域方法区堆 JVM在进行GC时并不是三个统一回收大部分时候回收新时代 年轻代存活率低-》复制算法 幸存区formto------》谁空谁是to 老年区存活率大-》标记清除算法内存碎片不是太多、标记压缩混合实现 GC两种类轻GC普通的GC、重GC全局GC GC的算法标记清除法、标记整理、复制算法、引用计数法 参考https://blog.csdn.net/qq_21383435/article/details/80473540 总结 内存效率复制算法标记清除算法标记压缩算法 内存整齐度复制算法标记压缩算法标记清除算法 内存利用率标记清除算法标记压缩算法复制算法 11、举例 1JMMjava Memory Model-》Java内存模型 1定义java Memory Model-》Java内存模型 2作用缓存一致性协议用于定义数据读写的规则遵循 参考https://blog.csdn.net/zjcjava/article/details/78406330 3如何学习 面试题https://www.cnblogs.com/wjh123/p/11094622.html