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 Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)中的一种内存模型,它描述了程序中各个变量之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节...
### Java内存模型详解 #### 1. JMM简介 ##### i. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,用于规定程序中的各种变量(包括实例字段、静态字段和数组元素等)在多个...
Java内存模型(JMM)是Java虚拟机(JVM)的一部分,它定义了程序中不同变量如何交互,特别是在多线程环境下。JMM确保了在各种硬件和操作系统平台上,Java程序的行为具有一致性和可预测性。Java内存模型的主要目标是...
Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...
Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)规范中的一个重要组成部分,它定义了程序中各个变量(包括实例域、静态域和数组元素)的访问规则,以及在实际计算机系统中如何将这些变量存储在内存和从...
Java VisualVM,简称jvisualvm,是Java开发人员在Windows环境下进行内存管理和性能分析的重要工具。它是Oracle JDK的一部分,提供了一种直观的方式来监控和诊断Java应用程序。本文将深入探讨jvisualvm的功能、使用...
Java 内存模型的抽象 4 重排序 6 处理器重排序与内存屏障指令 7 happens-before 10 重排序 13 数据依赖性 13 as-if-serial 语义 13 程序顺序规则 15 重排序对多线程的影响 15 顺序一致性 19 数据竞争与顺序...
### Java内存模型的介绍和说明 #### JMM 简介 Java Memory Model(JMM),即Java内存模型,是Java虚拟机规范中定义的一套规定,用于描述Java程序中的各种变量(包括实例字段、静态字段和数组元素)的访问规则,...
内存管理简介 内存管理的职责为分配内存,回收内存。 没有自动内存管理的语言/平台容易发生错误。 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知。 另一个...
### Java内存模型详解 #### 一、JMM简介 ##### 1. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,...
### Java内存模型(有助理解多线程) #### JMM简介 Java内存模型(JMM,Java Memory Model)是Java虚拟机规范中一个重要的概念,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,以及在...
Java 对象搜索器 | java内存对象搜索辅助工具 肖像画家 肖像画家 肖像画家 0x01 工具简介 ############################################################# Java Object Searcher v0.01 author: c0ny1 github: ...
Java内存模型(JMM)是Java编程中的一个重要概念,它规定了程序中各个变量的访问规则,尤其是在多线程环境下如何保证数据的一致性和可见性。JMM的目标是为了解决由于编译器优化、处理器缓存和多处理器系统间的内存...
### Java技术简介 #### 一、Java的历史与起源 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司在1995年推出。Java的设计初衷是作为一种通用的平台无关性语言,具有高度的安全性和可移植性,适用...
本教程主要围绕“Java基础知识简介”展开,包括Java语言概述、课程架构、Java SE结构、常用命令操作、语言特性、JDK配置与环境变量设置以及Java注释和API的使用。 首先,Java语言概述部分会介绍Java的历史背景,它...
Java内存模型(JMM,Java Memory Model)是Java并发编程中的关键概念,它定义了Java程序中各个线程对共享变量的访问规则,确保多线程环境下的正确性。JMM是为了应对现代多核CPU架构中可能出现的问题,如数据竞争和...