`
fenglingxuewqk
  • 浏览: 83335 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JVM内存学习

 
阅读更多

1.freeMemory(),totalMemory(),maxMemory()

java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()这几个方法的反映的都是 java这个进程的内存情况,跟操作系统的内存根本没有关系。

 

maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的 时 候,没有添加-Xmx参数,那么就是jvm默认的可以使用内存大小,client为64M,server为1G。如果添加了-Xmx参数,将以这个参数后 面的值为准。

 

totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的所 有内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少, 直到挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖 -Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。

 

freeMemory()是什么呢,刚才讲到如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从 操 作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是 freeMemory(),所以freeMemory()的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程 序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()可 能会有些大。

 

2. MaxDirectMemorySize

 

    // A user-settable upper limit on the maximum amount of allocatable direct  
    // buffer memory.  This value may be changed during VM initialization if  
    // "java" is launched with "-XX:MaxDirectMemorySize=<size>".  
    //  
    // The initial value of this field is arbitrary; during JRE initialization  
    // it will be reset to the value specified on the command line, if any,  
    // otherwise to Runtime.getRuntime().maxMemory().  
    //  
    private static long directMemory = 64 * 1024 * 1024;  
      
    // If this method is invoked during VM initialization, it initializes the  
    // maximum amount of allocatable direct buffer memory (in bytes) from the  
    // system property sun.nio.MaxDirectMemorySize.  The system property will  
    // be removed when it is accessed.  
    //  
    // If this method is invoked after the VM is booted, it returns the  
    // maximum amount of allocatable direct buffer memory.  
    //  
    public static long maxDirectMemory() {  
        if (booted)  
            return directMemory;  
      
        Properties p = System.getProperties();  
        String s = (String)p.remove("sun.nio.MaxDirectMemorySize");  
        System.setProperties(p);  
      
        if (s != null) {  
            if (s.equals("-1")) {  
                // -XX:MaxDirectMemorySize not given, take default  
                directMemory = Runtime.getRuntime().maxMemory();  
            } else {  
                long l = Long.parseLong(s);  
                if (l > -1)  
                    directMemory = l;  
            }  
        }  
      
        return directMemory;  
    }  

 

MaxDirectMemorySize没显式配置的时候,NIO direct memory可申请的空间的上限就是-Xmx减去一个survivor space的预留大小

MaxDirectMemorySize显示配置时,NIO direct memory可申请的空间的上限就是该值。

分享到:
评论

相关推荐

    JVM 深入学习教程深入分析JVM教程!jvm 内存原型,优化等等

    本教程将涵盖JVM内存模型、内存分配以及优化策略。 一、JVM内存模型 1. 堆内存:堆是所有线程共享的一块内存区域,主要用于存储对象实例。Java中的动态内存分配主要在堆上进行,垃圾收集器也会对堆进行管理,进行...

    JVM内存管理白皮书

    在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细...通过这份白皮书的学习,读者将能够深入理解JVM内存管理的复杂性,并掌握处理内存问题的有效方法。

    JVM-内存管理 2012-12.pdf

    JVM内存管理是Java平台的一个重要特性,其内存空间的分配和回收机制对Java应用程序的性能和稳定性有着至关重要的影响。 首先,JVM内存管理涉及的内存空间主要分为方法区(Method Area)、堆(Heap)、本地方法栈...

    在Eclipse状态栏上增加JVM内存用量指示器

    标题 "在Eclipse状态栏上增加JVM内存用量指示器" 涉及到的是一个关于Eclipse集成开发环境(IDE)的自定义配置和优化技术。Eclipse是一款广泛使用的Java IDE,它允许开发者通过插件扩展其功能。在这个特定的情况下,...

    JVM内存管理学习笔记

    《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...

    java -jvm 内存分配和jvm调优

    本文将深入探讨JVM内存结构,以及如何进行有效的内存调优。 首先,我们需要了解JVM内存模型。Java内存主要分为五个区域:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈...

    java中jvm内存分配相关资料总结整理

    本资料总结主要关注JVM内存分配及其运行原理,这对于理解和优化Java应用程序的性能至关重要。 1. **JVM内存结构** JVM内存分为几个关键区域:方法区(Method Area)、堆(Heap)、栈(Stack)、程序计数器(PC ...

    JVM 内存分析

    标题 "JVM 内存分析" 涉及到的是Java虚拟机(JVM)的...总之,JVM内存分析是Java开发中的重要课题,涉及到内存分配、垃圾回收、性能优化等多个方面,通过学习和实践,开发者可以更好地理解和解决内存相关的性能问题。

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    第二节:JVM内存模型 1.1 概念 1.2 JVM内存模型 1.3 Heap堆内存模型 第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)...

    JVM性能调优-JVM内存整理及GC回收

    《JVM性能调优-JVM内存整理及GC回收》是一份深入探讨Java虚拟机(JVM)优化的重要学习资料,特别适合对JAVA编程有经验的开发者。这份文档详细阐述了JVM性能调优的关键概念,包括JVM内存模型、垃圾回收(Garbage ...

    三问JMM--有关JVM内存模型的PPT

    ### 三问JMM——有关JVM内存模型的深度解析 #### 前言 近期,在诚信通开源研究小组的专题学习分享会上,我们针对Java内存模型(JMM)进行了深入探讨,现将JMM相关的一些核心概念进行梳理,以便更好地理解和把握JMM的...

    jvm的内存结构图的ppt模型分析.zip

    在“jvm的内存结构图的ppt模型分析”中,我们将深入探讨JVM内存的不同区域及其功能。 首先,JVM内存可以分为堆内存和栈内存两大主要部分,它们都是线程共享的。 1. **堆内存**:这是Java应用中所有对象实例的存储...

    jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

    1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这部分被元空间(Metaspace)取代。 - **运行时常量池**:是方法区的一部分,...

    Sun JVM原理与内存管理

    ### Sun JVM原理与内存管理 #### 一、Sun JDK 1.6 GC (Garbage Collector) Sun JDK 1.6 的垃圾收集器(GC)是其内存管理的关键组成部分,它负责自动地回收不再使用的对象所占用的内存。本文将详细介绍Sun JDK 1.6 GC...

    jvm虚拟机学习资料.zip

    本资料集合包含了多个关于JVM学习的重要主题,旨在帮助读者从基础到深入地掌握JVM的工作原理和优化技巧。 1. **JVM运行机制** (2.JVM运行机制.pptx) JVM的运行机制包括类加载、字节码执行、内存管理等关键过程。类...

    JVM内存结构笔记.rar

    Java虚拟机(JVM)是Java程序运行的核心,它的内存结构对于理解和优化Java应用程序的性能至关重要。本笔记将深入探讨JVM内存的...这份"JVM内存结构笔记"将详细阐述这些内容,是学习和研究JVM内存管理的重要参考资料。

Global site tag (gtag.js) - Google Analytics