`

jvm notes

阅读更多


运行时数据区
     program counter register 程序计数器
          java方法 存 正在执行的字节码指令地址   native方法  为空undefined
          每个线程有一个独立的
          规范没有规定ooM

     vm stack
          线程私有
          一个方法有一个stack frame 存局部变量 操作数栈 动态链接 方法出口   方法调用  压栈 出栈
          如果线程请求的栈深度大于虚拟机允许的  stackoverflowerror
          如果vm stack可以动态扩展 扩展时无法申请到足够的内存  OOM
              private static void oom(int i){
        while(i>1){
            oom(i);
        }
    }

    public static void main(String[] args) {
        oom(2); //28592 call
    }

     native method stack
          对应native方法
          也会sof oom

     java heap  
          线程共享
          存 对象实例
          新生代 老生代  survior
          线程私有的分配缓冲区 thread local allocation buffer
          没有内存完成实例分配 并且无法扩展  OOM    -Xmx  -Xms

     method area 方法区
          线程共享
          类信息 常量 静态变量 (字符串常量池 永久代)
          hotspot  永久代实现方法区(省去为方法区写内存管理) permanent generation
          -XX:MaxPermSize
          OOM
          运行时常量池runtime constant pool  
               class文件常量池  运行期也可以放进去 string.intern() 
               导致OOM


direct memory
     nio 使用时分配
     导致内存区域总和大于物理内存限制  动态扩展时出现OOM    


对象的内存布局
     header      hashcode gc分代 锁状态
     instance data
     padding   占位符

栈容量 -Xss
     每个线程分配栈容量  线程太多可能导致内存不够  栈内存OOM

OOM Error message
     Java heap space
     unable to create new native thread
     PermGen space  //动态生成大量class  大量jsp  osgi
     diect memory //dump文件很小  nio



GC
     引用计数   无法回收循环引用
     可达性分析  GC Roots 可达到的对象
      引用 不等于必要, 解决方法:  强引用  软引用  弱引用  虚引用 

     finalize方法只会被调用一次 下次GC不会调用

     永生代 常量池回收  无用类回收

垃圾收集算法
     标记-清除算法 
          效率问题
          内存碎片问题
     复制算法
          内存变为原来一半
          商业虚拟机用此算法回收新生代
     标记-整理算法
          对老生代使用
          存活对象向一端移动
     分代收集算法
          根据分代使用以上几种算法

内存分配
     小对象直接进入eden
     大对象(需要大量连续内存空间,很长的字符串及数组) 避免经常出现短命的大对象提前触发GC
    
     新对象进入eden,熬过一次Minor GC进入survivor,age设为1,到15岁后进入老生代 
          动态年龄判定

线程快照
     threaddump/javacore
堆转储快照
     headdump/hprof


jvm监控命令
     jps
     jinfo
     jstat -gcutil  vmid
     jmap  堆快照    -heap   -histo
     jhat   分析堆快照文件
     jstack 线程快照

     jconsole
     visualVM
     heap analyzer
     memory analyzer tool

class loader
     任一个类 由类加载器和类本身 确立其在JVM中的唯一性
     从JVM看 2种类加载器
                              C++实现的bootstrap classloader,  JVM的一部分
                              java实现的其他加载器, JVM外部
     java开发人员看
               bootstrap 加载JAVA_HOME/lib下的
               extension 加载JAVA_HOME/lib/ext下的
               application 加载classpath下的
    
     类加载器的层次用组合实现
               加载类的时候首先委托父类,父类没法再自己加载
               不是所有都是这样, jndi等spi、OSGi不是

GC性能指标
     throughput   GC花的时间越少,系统计算吞吐量越大   //适用于后台非实时计算
     pause time   stop the world时间// 实时交互系统很看重,如网站
     frequency     频率
     footprint       a measure of size, such as heap size
     promptness  对象成为垃圾到对象内存重新变为可用的时间间隔

GC设计抉择
     串行  并行
     并发 stop the world
     压缩 不压缩  复制
    

behavior-based tuning
     -XX:MaxGCPauseMillis=n
     -XX:GCTimeRatio=n
0
0
分享到:
评论

相关推荐

    jvm工具、参数调优&调试技巧

    - [JSTAT文档](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html) 以上介绍的各种JVM工具和参数对于Java开发人员来说是非常重要的,它们能够帮助我们更好地理解和管理JVM的行为,从而提高...

    notes.ini 参数 updated 2009-01-07

    2. `MaxHeapSize`: 控制Java虚拟机(JVM)的最大内存分配,直接影响服务器的性能。 3. `AdminServer`: 指定管理服务器,用于执行后台任务和管理操作。 4. `WebServerPort`: 配置HTTP服务器的监听端口,对于Web访问至...

    FileNotFoundExcetion#learning-notes#JVM内存分配2

    jmap -heap pid可以查看应用程序堆的信息jstat可以打印元空间信息MC :分配到元空间大小MU:已使用的元空间大小 元空间是可以自己扩容的元空间:

    Java notes

    这是通过Java虚拟机(JVM)实现的,JVM将编译后的Java字节码转换为特定平台的机器指令。 #### 二、Java虚拟机(JVM) **2.1 什么是JVM?** JVM即Java虚拟机,是一个运行时环境,用于执行编译后的Java类文件。它...

    JVM内存问题最佳实践

    查看厂商发布的Release Notes可以帮助判断版本的稳定性和已知的问题。 - **Oracle Java虚拟机**:包括原Sun Java虚拟机和BEA JRockit。这两个虚拟机都能在Windows、Linux、Solaris等平台上运行。Sun Java虚拟机历史...

    My Interview Notes

    【标签】"Interview Java Notes"进一步明确了这些文件的主要焦点,即与Java相关的面试准备,这可能包括但不限于语言特性、设计模式、框架应用、并发处理、内存管理等方面的知识。 【压缩包子文件的文件名称列表】:...

    java8源码-jvm-study:jvm-study

    https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 可以看jvm参数查看网址 Direct buffer memory : 直接内存太大(-XX:MaxDirectMemorySize=100m) Java heap space: 堆内存溢出 (-Xms30m -...

    JavaSE notes,笔记

    这份"JavaSE notes,笔记"包含了开发者在学习和实践JavaSE过程中的一些关键知识点和经验总结。 首先,JavaSE的核心是Java虚拟机(JVM),它是Java程序的运行环境。理解JVM的工作原理,包括类加载机制、内存模型(堆...

    java7rt.jar源码-Java_JVM:这是我的JavaJVM学习笔记

    notes JVM: java虚拟机 一:上篇——内存与垃圾回收器 二:中篇——字节码与类的加载 三:下篇——性能监控与调优篇 一: 上篇——内存与垃圾回收器 架构: jvm依赖的架构: 栈架构/寄存器架构 栈架构 JVM的生命周期: ...

    Notes:This is a learning note | Java基础,JVM,源码,大数据,面经

    Notes 我的笔记: 知识不总结,就会被大脑当垃圾清理 :horse:求知之路必然不会一帆风顺,唯有以勤为刃,以习惯为马,劈懒斩愚,跨越舒适区,方能知众人所不知,晓众人所不晓。 :person_walking:勤于思考的人,就算散步...

    core_java notes

    总结,"Core Java notes"涵盖了Java语言的核心概念,从基本语法到面向对象特性,再到高级主题如多线程和集合框架。理解并熟练掌握这些知识对于任何Java开发者来说都是至关重要的。通过深入学习和实践,可以提升编程...

    【java开发笔记指北】涵盖java、JVM、Spring、常用框架、中间件、数据库、数

    【java开发笔记指北】涵盖java、JVM、Spring、常用框架、中间件、数据库、数据结构与算法_study-notes

    Notes Java

    Java程序由类组成,通过类加载器加载到Java虚拟机(JVM)上执行。 二、Java语法 Java的语法与C++类似,但更简洁。它包含变量声明、数据类型(如整型、浮点型、字符型、布尔型)、运算符、控制结构(如if语句、for循环...

    notes:JavaJava后端工程师的学习笔记https

    loveincode's notes 学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 常用设计模式 单例模式 , 工厂模式 , 装饰者模式 , 代理...

    Linux安装配置Lotus

    在安装之前,你需要在Linux系统上安装Java虚拟机(JVM),这是Lotus Domino运行的基础。通常,我们会将安装文件拷贝到 `/usr/src` 目录下,但你也可以选择其他位置。通过命令 `rpm -ivh compat-libstdc++-8-3.3.4.2....

    JDK/JRE 6.0.x Older Versions Release Notes Portfolio

    Java Runtime Environment,简称JRE,是运行Java应用程序的环境,包含Java虚拟机(JVM)、Java类库和其他支持文件。任何想要在计算机上运行Java程序的用户都必须安装JRE。 ### Java 6.0:历史与重要性 Java 6.0,...

    Javanotes7-web-site

    它的设计目标是具有“写一次,到处运行”的特性,通过Java虚拟机(JVM)在不同平台上运行。Java的特点包括简单性、面向对象、健壮性、安全性以及高性能,使其在软件开发、移动应用、企业级应用等领域广泛应用。 在...

    javacore_notes

    源代码首先被编译器编译成字节码(`.class`文件),这些字节码再由Java虚拟机(JVM)解释执行。这种机制使得Java具有较好的跨平台特性。 - **指针与内存管理**:Java对指针进行了高级封装,称之为引用。通过引用...

    Notes:学习笔记:java,Javaweb,LInux,计算机网络,操作系统,JVM虚拟机,数据结构

    综上所述,这些学习笔记涵盖了软件开发中的多个核心领域,从基础的编程语言到Web开发,再到系统层面的操作系统和网络,以及深入的JVM理解和数据结构学习。对于希望全面掌握IT技术的学者或开发者来说,这些都是必不可...

    java_personal_study_notes.rar_personal

    11. **JVM(Java Virtual Machine)**:Java的执行环境,包括类加载、字节码解释、垃圾回收等机制,了解JVM工作原理有助于优化程序性能。 12. **设计模式**:笔记可能涵盖了常见的设计模式,如单例、工厂、观察者、...

Global site tag (gtag.js) - Google Analytics