`

深入理解Java虚拟机读书笔记之内存管理

JVM 
阅读更多

一、Java的内存主要有如下的部分组成:

 堆内存:存放对象或者数组实例。可以使用-Xms指定最小值,-Xmx指定最大值。分为新生带和老年点。其中新生代又可以分为伊甸园区和两个Survivor0区和Survivor1区,他们的内存比例用-XX:SurvivorRadio=X指定,例如如果这个值等于6,那么表示伊甸园区的内存总数为 新生代x6/(6+2)。内存溢出信息为:Java heap space。该内存区域为整个进程共享

方法区:存放加载类信息、静态常量以及即时编译器编译的本地代码。可以使用-XX:PermSize指定最小值,-XX:MaxPermSize指定最大值。内存溢出异常的信息为:PermGen space。该内存区域为整个进程共享

虚拟机栈:该区域为线程私有。主要存在本地变量表、最大操作数、动态连接、方法出口等信息。每个线程的虚拟机栈内存可以通过-Xss设定栈容量。

本地方法栈:在HotSpot虚拟机中和虚拟机栈合二为一。调用native方法。该区域为线程私有

程序计数器:记录当前线程执行字节码的行号。当进行多线程切换回来的时候可以找到正确的执行位置。

直接内存:在NIO中可以通过native方法直接分配内存。可以通过-XX:MaxDirectMemorySize指定,如果不指定。默认和java堆最大值一样。通过sun.misc.Unsafe的allocateMemory方法分配。

二、对象的访问方式:

    Sun Hotspot虚拟机使用直接指针的方式,对象的reference的值为堆内存中的内存地址。Java对象存储分为三部分 1.对象头:存储对象本身的状态和类型指针。2、实例数据:3、对齐填充(非必须)




三、垃圾回收

   1、什么样的对象会被回收掉

        使用 根搜索算法:只要能被root 链上引用到的就不会被回收。可以作为Root对象的有当前线程所在的变量(本地变量表)、类或者接口定义的静态变量。而不使用引用计数算法的原因是该算法不能解决循环引用的问题。

   2、在对象回收前如果用户复写了对象的finalize方法,在回收之前会调用这个方法,但是一个实例对象只会调用一次。建议不要使用该方法。

   3、java中对象的引用分为强引用(new Object()方式)、软引用(只有发生内存溢出的时候才会回收这些对象)、弱引用(下一次垃圾回收)、虚引用(拿不到引用的对象)

   4、垃圾收集的算法:A.标记-清除算法。这种算法内存碎片比较多,一般用于老年代。B复制算法:速度比较快,但是浪费了部分内存空间。一般用在新生代(新生代的分区)C标记-整理算法:速度比较慢,一般用于老年代。

    5、垃圾收集器。Serial收集器:垃圾收集的时候,暂停其他线程,使用单一的线程进行垃圾收集。ParNew收集器:垃圾收集的时候,暂停其他线程,使用多个的线程进行垃圾收集。其他收集器...

   6、内存分配和回收策略:

        A、对象优先在伊甸园区分配B、大对象可以直接进入老年代,可以通过-XX:PretenureSizeThreshold C、长期存活的对象进入老年代(每次Minor GC,对象年龄+1)。可以通过-XX:MaxTenuringThreshold指定对象的年龄。D、如果某个年龄的对象所占的内存大于新生代的一半,那么大于等于该年龄的对象会进入老年代。E、老年代的担保策略:如果老年代所剩的容量小于进入老年代对象的容量会进行Full GC。FullGC会比较耗时。  

四、工具篇

   1、VisualVm的BTrace插件,使用代码热交换技术。

 

 

  • 大小: 44.6 KB
分享到:
评论

相关推荐

    深入Java虚拟机读书笔记1

    深入理解Java虚拟机,首先我们要明白Java虚拟机(JVM)的核心功能:它负责装载类文件,执行字节码,并管理内存。Java虚拟机的结构复杂且高效,主要由类装载器、执行引擎、内存管理和类库等组件构成。 类装载器是JVM...

    高级java笔试题-understanding-the-jvm:《深入理解Java虚拟机》阅读笔记

    虚拟机》阅读笔记 本 repo 为《深入理解 Java 虚拟机 第2版》的阅读笔记,并对全书内容按照自己的理解进行了一定程度的整理。《深入理解 Java 虚拟机 第2版》原书主要分为了五个部分,这里仅对前四个部分进行讲解,...

    java虚拟机源码-openjdk7:openjdk7源码(深入理解java虚拟机,读书笔记)

    本资源是关于OpenJDK7源码的分析和学习资料,旨在帮助开发者深入理解Java虚拟机的工作原理。 首先,我们来了解一下Java虚拟机的主要组件和功能: 1. **类加载器**:负责加载Java字节码文件(.class),将其转换为...

    UnderstandingTheJVM:《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记

    本repository为《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记,因为第一章主要讲的是Java的发展历史,这里就不做笔记,直接从第2章的"Java内存区域与内存溢出异常"讲起。 第二部分 自动内存...

    狂神说JAVA的所有笔记.zip

    同时,可能会涵盖JVM(Java虚拟机)的工作原理,包括内存管理、类加载机制、性能优化等方面,这对于理解和优化JAVA程序的运行效率极其重要。 最后,笔记还可能包含了实际项目开发中的经验分享,如MVC框架Spring的...

    java学习笔记markdown

    9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收机制,有助于优化代码性能。 10. **泛型**:讨论Java泛型的使用,如何编写类型安全的代码,并理解其类型擦除的原理。 11. **枚举与...

    Java基础知识笔记.rar

    19. **垃圾回收**:理解Java的自动内存管理,包括垃圾收集机制和内存泄漏的概念。 20. **JVM**:简要了解Java虚拟机的工作原理,包括类加载、字节码执行和内存模型。 这份笔记不仅适合初学者,也对有经验的开发者...

    java学习笔记源码MD.rar

    Java学习笔记源码MD.rar是一个压缩包,其中包含了一系列关于Java编程语言的学习资料,特别是针对JVM(Java虚拟机),Spring框架以及Java多线程等内容的深入探讨。这些主题是Java开发中的核心部分,对于任何想要提升...

    Java学习笔记(必看经典)

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems...通过阅读《Java学习笔记(必看经典)》和《Java与模式》,初学者或有经验的开发者都能深入理解Java编程,并掌握设计和实现高效、可维护的Java应用的方法。

    java笔记全套下载

    11. **JVM原理**:理解Java虚拟机的工作机制,包括内存管理、类加载机制和垃圾回收。 12. **Spring框架**:学习Spring的核心特性,如依赖注入、AOP(面向切面编程)、事务管理等。 13. **数据库操作**:使用JDBC进行...

    Java任小龙版基础笔记.zip

    9. **JVM原理**:理解Java虚拟机的工作原理,包括类加载机制、内存模型和垃圾回收,这对于优化代码和排查问题非常重要。 10. **Java标准库**:熟悉常用的Java API,如Collections、Concurrency、Networking等包,...

    Corejava 核心java笔记

    10. **JVM与性能优化**: 了解Java虚拟机的工作原理,如类加载机制、内存模型、垃圾回收策略,有助于进行程序性能调优。 这些知识点构成了Java编程的基础,通过阅读和整理"Corejava 核心java笔记",初学者可以系统地...

    scjp java考试认证笔记

    10. **JVM与类加载器**:理解Java虚拟机的工作原理,包括类的加载、验证、准备、解析和初始化阶段,以及类加载器的概念。 11. **Java标准库**:熟悉常用的Java API,如集合框架、IO流、日期时间API、XML处理、网络...

    java笔记javajava

    11. **JVM和字节码**:Java代码编译成字节码后,由Java虚拟机(JVM)解释执行。理解JVM的工作原理和内存模型,以及如何优化字节码,可以提高程序的运行效率。 12. **模块系统(Java 9及以上版本)**:Java 9引入了...

    良葛格java学习笔记

    8. **JVM原理**:简要介绍Java虚拟机的工作原理,包括内存模型、类加载机制、垃圾收集器和调优策略。 9. **网络编程**:涉及Socket编程,讲解如何建立客户端和服务端通信,以及套接字和服务器套接字的使用。 10. *...

    Java 学成在线笔记

    Java 学成在线笔记是针对Java编程语言的学习资源,它以Markdown格式呈现,方便学习者在在线教育环境中查阅和理解。Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化...

    《良葛格的Java学习笔记》

    2. **环境配置**:学习Java的第一步是安装Java Development Kit (JDK)并配置环境变量,包括设置JAVA_HOME、PATH和CLASSPATH等,确保能够运行Java编译器javac和Java虚拟机java。 3. **基础语法**:笔记会详细讲解...

    java se学习笔记

    10. **Java虚拟机(JVM)**: - **内存模型**:堆、栈、方法区、本地方法栈和程序计数器的理解。 - **垃圾回收(GC)**:理解垃圾回收的工作机制,以及内存泄漏的问题。 以上就是【Java SE学习笔记】可能覆盖的...

    Java《剑指Offer》刷题笔记.zip

    8. **垃圾回收与内存管理**:理解Java垃圾回收的工作原理,分析对象生命周期,以及如何避免内存泄漏。 9. **JVM虚拟机**:包括JVM内存模型、类加载机制、类加载器、垃圾回收算法、性能优化等。 10. **Spring框架**...

    java学习笔记11111

    在学习Java时,理解JVM(Java虚拟机)的工作原理也很关键,它负责解释执行字节码,并提供垃圾回收机制,自动管理内存。此外,线程并发是现代编程中的重要概念,Java提供了丰富的API支持多线程编程,如synchronized...

Global site tag (gtag.js) - Google Analytics