zoukankan      html  css  js  c++  java
  • JVM探究

    JVM探究

    1. 对JVM的了解(虚拟机)

      Java → Class文件 → JVM

      OOM:内存溢出

      Stack Overflow:栈溢出

      双亲委派机制:保证安全

      如果包名,方法名一样(和API里面的方法toString重名) 执行会向上找 ,只有BOOT,EXC都没有才执行APP里方法

      APP当前应用程序 → EXC扩展加载器 →BOOT根加载器(最终执行)向上委托

      截图

    2. Native:凡是带了native关键字,说明Java的作用范围达不到了,回去调用底层C预言的库.

      会进入本地方法栈

      调用本地方法本地接口 JNI (java native interface)

      JNI作用:扩展java的使用,融合不同的语言为java所用

      方法区:static , final , Class , 常量池 ~

    3. 栈:数据结构

      程序=框架+业务逻辑 (SSH→SSM→Spring BOOT→Spring Cloud)

      程序=数据结构+算法 (持续学习,吃不了学习的苦,吃生活的苦)

      栈:先进后出,后进先出 (桶)

      队列:先进先出 (管道) (FIFO:First Input First Output)

      栈内存:8大基本类型+对象引用+实例的方法

    4. 堆 Heap (存放:类,方法,常量,变量 ~ 保存所有引用类型的真实对象)

      Heap 一个JVM只有一个堆内存,堆内存的大小是可以调节的

      堆内存中还要细分三个区域:

      ​ 新生区 (伊甸园区) Young/NEW

      ​ 养老区 old

      ​ 永久区 Perm 不存在GC回收,关闭JVM虚拟机就会释放这个区域的内存

      GC 垃圾回收, 主要是在伊甸园区和养老区 ~

      OOM :内存满了,内存不够 OutOfMemoryError

      解决方式:1,尝试扩大内存看结果 (-Xms1024m -Xmx1024m -XX:+PrintGCDetails)

      2,分析内存,看一下那个地方出现了问题(内存快照分析工具 Eclipse插件:MAT IDEA插件:Jprofiler)

      JDK8以后把永久区改名为 元空间 (逻辑上存在,物理上不存在 ,计算内存 Young+old=Total Memory)

      两种GC: Full GC 重GC 清理Young + old 轻GC 清理Young区

      默认情况下:分配的总内存是电脑内存的1/4 ,而初始化的内存 1/64

      MAT , Jprofiler 作用:

      ​ 分析Dump内存文件,快速定位内存泄漏

      ​ 获得堆中的数据

      ​ 获得大的对象

      ​ OOM用Jprofiler定位错误,先安装Jprofiler,在Ideal中Seting,在Edit Configuration中Dump出文件

      ​ 把Dump出的文件用Jprofiler分析,分析线程可以定位到错误代码行

      (-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError)

      GC的算法有哪些:标记清除法,标记压缩,复制算法,引用计数器,

      没有最好的算法,只有最合适的算法 --> GC : 分代收集算法

    JMM : Java内存模型 Java Memory Mode

    ​ 作用: 缓存一致性协议,用于定义数据读写的规则(遵守)

    ​ JMM定义了线程工作内存和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中

    ​ 每个线程都有一个私有的本地内存 (Local Memory)

    ​ 解决共享对象可见性这个问题 : volilate : 多线程Local中写完后立马保存到主内存

  • 相关阅读:
    PGPDesktop在win7环境下的安装和使用
    2017-2018-1 20155214 《信息安全技术》 实验二
    2017-2018-1 20155214 《信息安全系统设计基础》 第6周学习总结
    2017-2018-1 20155214 《信息安全系统设计基础》 第6周课下作业
    2017-2018-1 20155214 《信息安全系统设计基础》 第5周学习总结
    2017-2018-1 20155214 《信息安全系统设计基础》第四周学习总结
    2017-2018-1 20155214 《信息安全系统设计基础》第3周学习总结
    20155214 2017-2018-1 《信息安全系统设计基础》第1周学习总结
    Java程序设计 第16周 课堂实践 —— 数据库4
    Java程序设计 第16周 课堂实践 —— 数据库3
  • 原文地址:https://www.cnblogs.com/DingGuo/p/14982906.html
Copyright © 2011-2022 走看看