`
wangchangjun
  • 浏览: 26365 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java内存简介

阅读更多

 

1.   Java 内存简介

Java 把内存划为为方法区,堆区,本地方法栈, pc 寄存器和 jvm 线程栈。

1.1.  方法区

存放类基本信息,静态变量等基本信息。默认最小值为 16mb ,最大为 64mb ,可以通过设置 -XX:PermSize -XX:MaxPermSize 来设置。

1.2.  堆区

存放实例对象。所有 new 出来的对象都在此去来分配。 32 位操作系统最大为 2gb 64 位没有限制。可通过设置 -Xms -Xmx 来设置最小和最大堆内存。 -Xms :最小堆内存 -Xmx :最大堆内存。默认空余堆内存小于 40% 时, JVM 就会增大堆直到 -Xmx 的最大限制,可以由 -XX:MinHeapFreeRatio= 指定。默认空余堆内存大于 70% 时, JVM 会减少堆直到 -Xms 的最小限制,可以由 -XX:MaxHeapFreeRatio= 指定。一般情况是把 -Xms -Xmx 设置大小一致,目的是为了减少 jvm 频繁调整 heap 大小。

1.2.1.    新生代

新生代又由 eden space 和两块大小相同的 survivor space 组成。 -XX:NewRatio 参数可以设置 Young Old 的大小比例, -server 时默认为 1:2 -Xmn 可以设置新生代的大小,有文档推荐设为 Heap 总大小的 1/4 -XX:survivorRatio 调整 eden space survivor space 的大小。

1.2.2.    旧生代

用来存放经过多次垃圾回收仍然存活的对象。新建的对象也可以直接分配在旧生代,一是大对象,通过参数 -XX PretenureSizeThreshold 来设置,单位为字节,默认为 0 ,当创建的对象大于这个数时,就在旧生代创建。另外一种是大的数组对象,且数组中无引用外部对象。

1.3.  pc 寄存器和 jvm 方法栈

每个线程都会创建 pc 寄存器和 jvm 方法栈, pc 寄存器更多可能是占用 cpu 内存和操作系统内存。 jvm 方法栈占用为操作系统内存,可通过参数 -Xss 设置其大小,单位为字节。

2.   Java 内存分配

3.   Java 内存回收

Java 认为程序中大部分的对象存活时间都很短,只有少部分存活时间长。 Java jdk 划分为新生代和旧生代。并且提供了不同的 gc 回收方式。不管做那种类型的 gc ,都需要暂停应用。

3.1.  新生代

新生代使用 copy 算法来实现对内存的回收。 Java 提供三种方式回收新生代内存,对新生代的内存回收又通常称为 minor GC

3.1.1.    串行 GC

-XX:+UseSerialGC 标识串行 GC 。从根集合扫描新生代存活对象,根集合对象为:当前运行线程栈、常量、静态 变量和 remember set 标记对象。何为 remember set 标记对象呢 ? 旧生代对象也有可能引用新生代的对象。 Sun jdk 在给对象赋值的时候,会检查该对象是在新生代还是旧生代,如果是就生代,就做 remember set 标记,这样避免每次 gc 都去扫描旧生代,而旧生代一般都会很大。串行采用单线程回收 gc

 

 

 

分享到:
评论

相关推荐

    Java内存模型详解JMM.docx

    Java内存模型详解JMM Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)中的一种内存模型,它描述了程序中各个变量之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节...

    Java内存模型详解

    ### Java内存模型详解 #### 1. JMM简介 ##### i. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,用于规定程序中的各种变量(包括实例字段、静态字段和数组元素等)在多个...

    java内存模型.pdf

    Java内存模型(JMM)是Java虚拟机(JVM)的一部分,它定义了程序中不同变量如何交互,特别是在多线程环境下。JMM确保了在各种硬件和操作系统平台上,Java程序的行为具有一致性和可预测性。Java内存模型的主要目标是...

    java 内存溢出分析工具 HeapAnalyzer

    Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...

    java内存查看工具jvisualvm

    Java VisualVM,简称jvisualvm,是Java开发人员在Windows环境下进行内存管理和性能分析的重要工具。它是Oracle JDK的一部分,提供了一种直观的方式来监控和诊断Java应用程序。本文将深入探讨jvisualvm的功能、使用...

    深入理解Java内存模型.程晓明(带书签文字版).pdf

    Java 内存模型的抽象 4 重排序 6 处理器重排序与内存屏障指令 7 happens-before 10 重排序 13 数据依赖性 13 as-if-serial 语义 13 程序顺序规则 15 重排序对多线程的影响 15 顺序一致性 19 数据竞争与顺序...

    java内存管理以及GC

    内存管理简介 内存管理的职责为分配内存,回收内存。 没有自动内存管理的语言/平台容易发生错误。 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知。 另一个...

    Java内存模型,全面了解Java内存模型,减少代码bug

    ### Java内存模型详解 #### 一、JMM简介 ##### 1. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,...

    java内存模型(有助理解多线程)

    ### Java内存模型(有助理解多线程) #### JMM简介 Java内存模型(JMM,Java Memory Model)是Java虚拟机规范中一个重要的概念,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,以及在...

    Java 对象搜索器 - java内存对象搜索辅助工具

    Java 对象搜索器 | java内存对象搜索辅助工具 肖像画家 肖像画家 肖像画家 0x01 工具简介 ############################################################# Java Object Searcher v0.01 author: c0ny1 github: ...

    Java内存模型精辟总结

    Java内存模型(JMM)是Java编程中的一个重要概念,它规定了程序中各个变量的访问规则,尤其是在多线程环境下如何保证数据的一致性和可见性。JMM的目标是为了解决由于编译器优化、处理器缓存和多处理器系统间的内存...

    java技术简介

    ### Java技术简介 #### 一、Java的历史与起源 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司在1995年推出。Java的设计初衷是作为一种通用的平台无关性语言,具有高度的安全性和可移植性,适用...

    java基础知识简介

    本教程主要围绕“Java基础知识简介”展开,包括Java语言概述、课程架构、Java SE结构、常用命令操作、语言特性、JDK配置与环境变量设置以及Java注释和API的使用。 首先,Java语言概述部分会介绍Java的历史背景,它...

    13 问题的根源—Java内存模型简介.pdf

    Java内存模型(JMM,Java Memory Model)是Java并发编程中的关键概念,它定义了Java程序中各个线程对共享变量的访问规则,确保多线程环境下的正确性。JMM是为了应对现代多核CPU架构中可能出现的问题,如数据竞争和...

Global site tag (gtag.js) - Google Analytics