当前位置: 首页 > news >正文

餐饮公司网站建设网站制作公司北京网站建设公司

餐饮公司网站建设,网站制作公司北京网站建设公司,刷网站关键词工具,wordpress 菜单大小1、什么是JVM内存结构#xff1f; jvm将虚拟机分为5大区域#xff0c;程序计数器、虚拟机栈、本地方法栈、java堆、方法区#xff1b; 程序计数器#xff1a;线程私有的#xff0c;是一块很小的内存空间#xff0c;作为当前线程的行号指示器#xff0c;用于记录当前虚拟…1、什么是JVM内存结构 jvm将虚拟机分为5大区域程序计数器、虚拟机栈、本地方法栈、java堆、方法区 程序计数器线程私有的是一块很小的内存空间作为当前线程的行号指示器用于记录当前虚拟机正在执行的线程指令地址 虚拟机栈线程私有的每个方法执行的时候都会创建一个栈帧用于存储局部变量表、操作数、动态链接和方法返回等信息当线程请求的栈深度超过了虚拟机允许的最大深度时就会抛出StackOverFlowError 本地方法栈线程私有的保存的是native方法的信息当一个jvm创建的线程调用native方法后jvm不会在虚拟机栈中为该线程创建栈帧而是简单的动态链接并直接调用该方法 堆java堆是所有线程共享的一块内存几乎所有对象的实例和数组都要在堆上分配内存因此该区域经常发生垃圾回收的操作 方法区存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据。即永久代在jdk1.8中不存在方法区了被元数据区替代了原方法区被分成两部分1加载的类信息2运行时常量池加载的类信息被保存在元数据区中运行时常量池保存在堆中 2、什么是JVM内存模型 Java 内存模型下文简称 JMM就是在底层处理器内存模型的基础上定义自己的多线程语义。它明确指定了一组排序规则来保证线程间的可见性。 这一组规则被称为 Happens-Before, JMM 规定要想保证 B 操作能够看到 A 操作的结果无论它们是否在同一个线程那么 A 和 B 之间必须满足 Happens-Before 关系 单线程规则一个线程中的每个动作都 happens-before 该线程中后续的每个动作 监视器锁定规则监听器的解锁动作 happens-before 后续对这个监听器的锁定动作 volatile 变量规则对 volatile 字段的写入动作 happens-before 后续对这个字段的每个读取动作 线程 start 规则线程 start() 方法的执行 happens-before 一个启动线程内的任意动作 线程 join 规则一个线程内的所有动作 happens-before 任意其他线程在该线程 join() 成功返回之前 传递性如果 A happens-before B, 且 B happens-before C, 那么 A happens-before C 怎么理解 happens-before 呢如果按字面意思比如第二个规则线程不管是不是同一个的解锁动作发生在锁定之前这明显不对。happens-before 也是为了保证可见性比如那个解锁和加锁的动作可以这样理解线程1释放锁退出同步块线程2加锁进入同步块那么线程2就能看见线程1对共享对象修改的结果。 Java 提供了几种语言结构包括 volatile, final 和 synchronized, 它们旨在帮助程序员向编译器描述程序的并发要求其中 volatile - 保证可见性和有序性 synchronized - 保证可见性和有序性; 通过管程Monitor保证一组动作的原子性 final - 通过禁止在构造函数初始化和给 final 字段赋值这两个动作的重排序保证可见性如果this 引用逃逸就不好说可见性了 编译器在遇到这些关键字时会插入相应的内存屏障保证语义的正确性。 有一点需要注意的是synchronized 不保证同步块内的代码禁止重排序因为它通过锁保证同一时刻只有一个线程访问同步块或临界区也就是说同步块的代码只需满足 as-if-serial 语义 - 只要单线程的执行结果不改变可以进行重排序。 所以说Java 内存模型描述的是多线程对共享内存修改后彼此之间的可见性另外还确保正确同步的Java 代码可以在不同体系结构的处理器上正确运行。 3、heap 和stack 有什么区别 1申请方式 stack:由系统自动分配。例如声明在函数中一个局部变量 int b; 系统自动在栈中为 b 开辟空间 heap:需要程序员自己申请并指明大小在 c 中 malloc 函数对于Java 需要手动 new Object()的形式开辟 2申请后系统的响应 stack只要栈的剩余空间大于所申请空间系统将为程序提供内存否则将报异常提示栈溢出。 heap首先应该知道操作系统有一个记录空闲内存地址的链表当系统收到程序的申请时会遍历该链表寻找第一个空间大于所申请空间的堆结点然后将该结点从空闲结点链表中删除并将该结点的空间分配给程序。另外由于找到的堆结点的大小不一定正好等于申请的大小系统会自动的将多余的那部分重新放入空闲链表中。 3申请大小的限制 stack栈是向低地址扩展的数据结构是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的在 WINDOWS 下栈的大小是 2M默认值也取决于虚拟内存的大小如果申请的空间超过栈的剩余空间时将提示 overflow。因此能从栈获得的空间较小。 heap堆是向高地址扩展的数据结构是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的 自然是不连续的而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见 堆获得的空间比较灵活也比较大。 4申请效率的比较 stack由系统自动分配速度较快。但程序员是无法控制的。 heap由 new 分配的内存一般速度比较慢而且容易产生内存碎片,不过用起来最方便。 5heap和stack中的存储内容 stack在函数调用时第一个进栈的是主函数中后的下一条指令函数调用语句的下一条可执行语句的地址 然后是函数的各个参数在大多数的 C 编译器中参数是由右往左入栈的然后是函数中的局部变量。注意静态变量是不入栈的。当本次函数调用结束后局部变量先出栈然后是参数最后栈顶指针指向最开始存的地址也就是主函数中的下一条指令程序由该点继续运行。 heap一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 4、什么情况下会发生栈内存溢出 栈是线程私有的栈的生命周期和线程一样每个方法在执行的时候就会创建一个栈帧它包含局部变量表、操作数栈、动态链接、方法出口等信息局部变量表又包括基本数据类型和对象的引用 当线程请求的栈深度超过了虚拟机允许的最大深度时会抛出StackOverFlowError异常方法递归调用肯可能会出现该问题 调整参数-xss去调整jvm栈的大小 5、谈谈对 OOM 的认识如何排查 OOM 的问题(重点) 除了程序计数器其他内存区域都有 OOM 的风险。 栈一般经常会发生 StackOverflowError比如 32 位的 windows 系统单进程限制 2G 内存无限创建线程就会发生栈的 OOM Java 8 常量池移到堆中溢出会出 java.lang.OutOfMemoryError: Java heap space设置最大元空间大小参数无效 堆内存溢出报错同上这种比较好理解GC 之后无法在堆中申请内存创建对象就会报错 方法区 OOM经常会遇到的是动态生成大量的类、jsp 等 直接内存 OOM涉及到 -XX:MaxDirectMemorySize 参数和 Unsafe 对象对内存的申请。 排查 OOM 的方法 增加两个参数 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/tmp/heapdump.hprof当 OOM 发生时自动 dump 堆内存信息到指定目录 同时 jstat 查看监控 JVM 的内存和 GC 情况先观察问题大概出在什么区域 使用 MAT 工具载入到 dump 文件分析大对象的占用情况比如 HashMap 做缓存未清理时间长了就会内存溢出可以把改为弱引用 。 6、谈谈 JVM 中的常量池 JVM常量池主要分为Class文件常量池、运行时常量池全局字符串常量池以及基本类型包装类对象常量池。 Class文件常量池。class文件是一组以字节为单位的二进制数据流在java代码的编译期间我们编写的java文件就被编译为.class文件格式的二进制数据存放在磁盘中其中就包括class文件常量池。 运行时常量池运行时常量池相对于class常量池一大特征就是具有动态性java规范并不要求常量只能在运行时才产生也就是说运行时常量池的内容并不全部来自class常量池在运行时可以通过代码生成常量并将其放入运行时常量池中这种特性被用的最多的就是String.intern()。 全局字符串常量池字符串常量池是JVM所维护的一个字符串实例的引用表在HotSpot VM中它是一个叫做StringTable的全局表。在字符串常量池中维护的是字符串实例的引用底层C实现就是一个Hashtable。这些被维护的引用所指的字符串实例被称作”被驻留的字符串”或”interned string”或通常所说的”进入了字符串常量池的字符串”。 基本类型包装类对象常量池java中基本类型的包装类的大部分都实现了常量池技术这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外上面这5种整型的包装类也只是在对应值小于等于127时才可使用对象池也即对象不负责创建和管理大于127的这些类的对象。 7、如何判断一个对象是否存活 判断一个对象是否存活分为两种算法1引用计数法2可达性分析算法 1引用计数法 给每一个对象设置一个引用计数器当有一个地方引用该对象的时候引用计数器就1引用失效时引用计数器就-1当引用计数器为0的时候就说明这个对象没有被引用也就是垃圾对象等待回收 缺点无法解决循环引用的问题当A引用BB也引用A的时候此时AB对象的引用都不为0此时也就无法垃圾回收所以一般主流虚拟机都不采用这个方法 2可达性分析法 从一个被称为GC Roots的对象向下搜索如果一个对象到GC Roots没有任何引用链相连接时说明此对象不可用在java中可以作为GC Roots的对象有以下几种 虚拟机栈中引用的对象 方法区类静态属性引用的变量 方法区常量池引用的对象 本地方法栈JNI引用的对象 但一个对象满足上述条件的时候不会马上被回收还需要进行两次标记第一次标记判断当前对象是否有finalize()方法并且该方法没有被执行过若不存在则标记为垃圾对象等待回收若有的话则进行第二次标记第二次标记将当前对象放入F-Queue队列并生成一个finalize线程去执行该方法虚拟机不保证该方法一定会被执行这是因为如果线程执行缓慢或进入了死锁会导致回收系统的崩溃如果执行了finalize方法之后仍然没有与GC Roots有直接或者间接的引用则该对象会被回收 8、强引用、软引用、弱引用、虚引用是什么有什么区别 强引用就是普通的对象引用关系如 String s new String(“ConstXiong”) 软引用用于维护一些可有可无的对象。只有在内存不足时系统则会回收软引用对象如果回收了软引用对象之后仍然没有足够的内存才会抛出内存溢出异常。SoftReference 实现 弱引用相比软引用来说要更加无用一些它拥有更短的生命周期当 JVM 进行垃圾回收时无论内存是否充足都会回收被弱引用关联的对象。WeakReference 实现 虚引用是一种形同虚设的引用在现实场景中用的不是很多它主要用来跟踪对象被垃圾回收的活动。PhantomReference 实现 9、被引用的对象就一定能存活吗 不一定看 Reference 类型弱引用在 GC 时会被回收软引用在内存不足的时候即 OOM 前会被回收但如果没有在 Reference Chain 中的对象就一定会被回收。 10、Java中的垃圾回收算法有哪些 java中有四种垃圾回收算法分别是标记清除法、标记整理法、复制算法、分代收集算法 标记清除法 第一步利用可达性去遍历内存把存活对象和垃圾对象进行标记 第二步在遍历一遍将所有标记的对象回收掉 特点效率不行标记和清除的效率都不高标记和清除后会产生大量的不连续的空间分片可能会导致之后程序运行的时候需分配大对象而找不到连续分片而不得不触发一次GC 标记整理法 第一步利用可达性去遍历内存把存活对象和垃圾对象进行标记 第二步将所有的存活的对象向一段移动将端边界以外的对象都回收掉特点适用于存活对象多垃圾少的情况需要整理的过程无空间碎片产生 复制算法 将内存按照容量大小分为大小相等的两块每次只使用一块当一块使用完了就将还存活的对象移到另一块上然后在把使用过的内存空间移除 特点不会产生空间碎片内存使用率极低 分代收集算法 根据内存对象的存活周期不同将内存划分成几块java虚拟机一般将内存分成新生代和老生代在新生代中有大量对象死去和少量对象存活所以采用复制算法只需要付出少量存活对象的复制成本就可以完成收集老年代中因为对象的存活率极高没有额外的空间对他进行分配担保所以采用标记清理或者标记整理算法进行回收 对比
http://www.yutouwan.com/news/337201/

相关文章:

  • 深圳论坛网站设计哪家公司好临沂网站制作加速企业发展
  • 织梦源码怎样做单页网站服装网络营销策划书
  • 瓜子二手车网站开发电销系统哪家好
  • 建立网站 杭州沈阳建站培训
  • 做室内设计兼职的网站wordpress显示浏览量
  • 网站设计存在的不足360竞价推广
  • 一个虚拟主机绑定2个网站商标设计网站猪八戒
  • 免费拒绝收费网站成都网站制作费用
  • 网站建设端口北京经济技术开发区建设局网站
  • 永川网站设计seo能从搜索引擎中获得更多的
  • 公司网站 钓鱼网站知乎怎么申请关键词推广
  • 长沙公司网站高端网站建设网站空间要多少钱
  • 网站推广营销应该怎么做网站建设公司哪个好点
  • 网站制作报价深圳彩票网站建设
  • 名校长工作室网站建设腾讯云服务器多少钱
  • 郑州企业网站快速优化多少钱通辽市做网站公司
  • 网站是哪家公司开发的小程序商城模板下载
  • 企业网站优化做什么wordpress站点语言
  • 北京网站定制制作石家庄房产信息网查询系统
  • 网站404 原因网站开发的条件
  • 教育网站报名爱战网官网
  • 一流的聊城做网站费用成都市郫都区
  • 杏坛网站建设建材网站建设公司
  • vs2017网站开发时修改的页面未变化搜索引擎优化培训班
  • 兰州做网站维护的公司3g手机网站
  • 广州做网站信科建设网络市场调研的步骤
  • 厦门企业建站系统模板做英文网站公司
  • 山东建设厅科技处网站贵阳市白云区官方网站
  • 做精酿啤酒购买的网站网站建设费怎么写会计科目
  • 深圳做分销网站的公司昆明网站建设设计