`
ztianlong
  • 浏览: 66650 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java内存

 
阅读更多
java内存分配:
根据是否是线程来占有的:
线程独享的:
程序计数器 :记录当前线程执行到的行数(如果当前执行的是native方法的话,则计数器的值为undefined)
虚拟机栈:   每个方法被执行的时候,都被会创建一个帧栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
本地方法栈    为本地(native)方法提供的内存区域

虚拟机相关的(线程共享的):
堆          存放对象实例的 
方法区 存储已被java虚拟机加载的类信息,常量,静态变量,即时编译器 编译后的代码等数据 
运行时常量池:(方法区的一部分)存放了编译期生成的各种字面量和符号引用,和运行期间产生的新的常量

直接内存(非虚拟机运行时数据区的一部分)


垃圾回收的区域:
    和线程相关的 虚拟机栈,本地方法栈,pc计数器所占用的空间是确定的,分配和回收随着线程的开始和结束而进行的。

虚拟机相关的内存区域是回收的重点,即堆和方法区。


内存分配:
   对象优先在eden区分配
大对象直接进入老年代
    长期存活的对象会晋升到老年代

判断对象是否已死的算法:
   1.引用计数法
   2.根搜索算法  java 虚拟机采用的方式 (可以防止循环引用) 如果某个对象到GC Roots没有任何引用链,那么这个对象就是不可达的,会被垃圾回收器回收掉。
     可以作为GC Roots的对象:
    虚拟机栈中引用的对象
本地方法栈中引用的对象
方法区中的类静态变量引用的对象
方法区中的常量引用的对象

引用的类型
1.强引用 不会被垃圾回收掉的引用
2.软引用 在将要发生内存溢出的时候,GC进行垃圾回收之后发现还是不能避免溢出的时候,会回收这类引用的对象
3.弱引用 在下一次GC时会被回收的对象
4.虚引用

方法区的回收:

    1.废弃的常量
2.无用的类




名称 作用区域 特点 优点
Serial 新生代 单线程收集器,在回收的时候会暂停其他线程的工作(stop the world) 在单个CPU的环境下,可以获得最高的单线程收集效率,适用于运行在client模式下的虚拟机的新生代gc首选

ParNew 新生代 Serial的多线程版本 是运行在server模式下的虚拟机首选的新生代收集器

Parallel scavenge 新生代 主要用于控制吞吐量。复制算法,并行的多线程收集器,提供了自适应策略 适合在后台运算,而不需要太多交互的场合
Serial old 老年代 Serial的老年代版本 1.在1.5之前与 parallel scavenge搭配
2.作为CMS收集器的后背预案

Parallel old 老年代 Parallel scavenge的老年代版本 标记-整理算法 在注重吞吐量及cpu资源敏感的场合优先考虑
Concurrent mark sweep  CMS 老年代 标记-清除算法
四步:
初始标记(stop the world)
并发标记
重新标记(stop the world)
并发清除

以获取最短回收停顿为目标


分享到:
评论

相关推荐

    java内存机制及异常处理

    Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: 1. **Heap(堆)**:这是Java中最主要的内存区域,用于存储所有的类实例和数组。当堆空间...

    java内存泄露、溢出检查方法和工具

    Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...

    eclipse设置 java内存

    eclipse设置java内存 Eclipse是一个功能强大且广泛使用的集成开发环境(IDE),但是,如果不正确地设置其运行内存,可能会导致内存溢出错误。因此,正确地设置Eclipse的java内存是非常重要的。本文将详细介绍如何...

    Java内存泄露及内存无法回收解决方案

    Java内存管理是编程中至关重要的一个环节,尤其是对于大型、长时间运行的应用来说,内存泄漏和内存无法回收可能导致系统性能下降,甚至导致系统崩溃。本文将深入探讨Java内存泄露的原理,分析内存无法回收的原因,并...

    深入理解Java内存模型 pdf 超清版

    Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了程序中各个线程如何访问和修改共享变量,以及如何确保数据的一致性。深入理解Java内存模型对于编写高效的并发程序至关重要。本文...

    jProfiler7 java内存分析 linux版本

    本篇文章将详细探讨jProfiler7在Java内存分析上的核心功能、使用方法以及在Linux环境中的配置和应用。 1. **内存分析概述** - 内存分析是识别和解决Java应用程序中的内存泄漏、过度对象创建和内存消耗过高问题的...

    如何解决Java内存泄漏

    ### 如何解决Java内存泄漏 #### 1. 背景 Java凭借其垃圾回收机制大大简化了内存管理,使得开发者无需手动管理内存的释放,从而提升了开发效率。然而,这种自动化管理也可能成为一把双刃剑,特别是当开发人员忽视...

    java内存分析-内存泄露问题.rar

    Java内存分析是一个重要的主题,尤其是在开发复杂且性能要求高的应用程序时。内存泄露是Java程序员需要密切关注的问题,因为它们可能导致系统性能下降,甚至可能导致系统崩溃。本文将深入探讨Java内存分析和内存泄露...

    Java 内存模型

    Java内存模型是Java虚拟机规范中定义的一部分,它规定了Java程序中变量的读写行为,以及线程之间的交互规则。理解Java内存模型对于编写正确、高效的多线程程序至关重要。在Java 5之前,Java内存模型的描述比较模糊,...

    java内存原理.doc

    Java 内存原理 Java 内存原理是 Java 语言中的一种基本机制,用于管理和分配内存资源。在 Java 中,内存被分为两种:栈内存和堆内存。 栈内存是指在函数中定义的一些基本类型的变量和对象的引用变量。这些变量在...

    深入理解Java内存模型

    Java内存模型是并发编程中一个至关重要的概念,它定义了共享变量的访问规则,以及这些变量如何在多线程环境下进行读写操作。在深入理解Java内存模型之前,我们需要先了解并发编程模型的分类,然后掌握Java内存模型的...

    java内存泄漏分析工具

    Java内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。为了有效地诊断和解决这类问题,开发者需要借助特定的分析工具。本篇将详细探讨Java内存泄漏及其相关的分析工具。 内存泄漏是指...

    JAVA内存分析 - V1.0.0.zip

    Java内存分析是Java开发中非常重要的一个环节,它关乎到应用程序的性能和稳定性。"JAVA内存分析 - V1.0.0.zip" 提供了一套工具来帮助开发者深入理解并优化Java应用程序的内存使用情况。这个压缩包包含了两个关键文件...

    java内存管理 ppt

    Java内存管理是Java编程中的核心概念,它涉及到程序运行时数据的存储、分配以及回收。在Java中,内存主要分为堆内存(Heap)和栈内存(Stack),还有方法区(Method Area)、程序计数器(PC Register)以及本地方法...

    Java内存机制学习和使用

    ### Java内存机制学习和使用 #### 一、Java内存机制概览 Java内存管理是Java开发人员必须掌握的核心概念之一。良好的内存管理不仅能够提升应用性能,还能避免常见的内存泄漏问题。本文旨在深入探讨Java内存机制,...

    java 内存溢出分析工具 HeapAnalyzer

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

    java内存模型文档

    这些文档如"Java内存模型.docx"、"Java内存模型2.docx"、"深入Java核心 Java内存分配原理精讲.docx"、"java内存模型.pdf"将深入探讨这些概念,帮助开发者更深入地理解Java内存模型及其在实际编程中的应用。...

    Java内存泄露检测

    Java内存泄露检测是Java开发中一个关键的议题,因为它直接影响到程序的稳定性和资源效率。内存泄露是指程序中已分配的内存无法被正确地释放,从而导致系统资源的浪费和可能导致程序性能下降甚至崩溃。 首先,理解...

    java内存解析(讲的很清楚的视频)

    java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存...

Global site tag (gtag.js) - Google Analytics