`
cnetwei
  • 浏览: 178043 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java内存及GC的基础知识备忘

阅读更多

1、堆与栈

在Java中除堆与栈之外 还有:方法区、常量池、本地方法栈等内存区域,但堆和栈是最重要的两个内存区域。

是JVM启动是统一分配的;而 是每一个线程所独有的,而堆是所有线程共享的。

栈: 其实应该叫线程栈。所有原生类型变量的内存分配都是在栈上进行,当程序退出该变量的作用范围时内存会被自动释放;

堆: 所有对象(非原生类型,即通过new关键子创建的对象)需要的内存都是在堆上分配,而堆上的内存回收由GC依据某种算法来进行回收和整理。

 

2、GC,垃圾收集器(Garbage Collector),其实更准确的说法应该是Java内存管理系统;它是一个独立的线程,在必要时使用某种算法对堆上的内存进行回收和整理。那么Java都提供哪些不同的内存回收算法呢?

 

3、分代复制收集算法:将堆上的内存进一步细分为年轻代区域(该去被称为edan---伊甸园的意思? )和年老代区域,并根据对象的生存时间将他们分别置于相应的区域。这一算法基于这样一个假设——即大约95%的对象的生成周期都非常短暂。 分代复制算法将刚刚新创建的对象归类为年轻代,并置入年轻代区域,直到年轻代区域空间已满,该算法将会对年轻代区域进行一次垃圾收集:将还被引用的对象升级为年老代,并copy到年老代区域,然后清空年轻代区域,等到年老代区域空间也满时,则启动其它回收算法(通常是标记算法);如此则进一步提高了内存回收效率。  

 

3、标记收集算法:该算法会从内存区域中找到还被引用的对象,并以此对象为根遍历其它被引用的对象,为它们都打上“存活”标记。未被标记的对象即“死亡”对象,会被清理掉。根据对存活对象处理方式的不同,又会细分为两类:

标记紧缩算法 :将所有存活对象copy到一块连续的内存区域中,有整理内存,减少内存碎片的效果。

标记清除算法 :保留存活对象不动,将死亡对象的内存空间记录下来,准备分配给后面新来的对象,这一算法会导致内存碎片,但却没有copy存活对象的开销。

 

以上两种收集算法(尤其是标记收集算法)运行是会停止JVM中的其它程序线程,而且会对整合区域进行扫描收集,因此程序停顿的时间不可预测,运行过程有明显停顿。于是就有了以下算法:  

4、增量收集算法:该算法是一种被改良的垃圾收集程序运行机制,它以固定时间间隔运行收集程序,每次仅收集很小一部分空间。而且固定时间间隔短到用户不能觉察,因此不会产生明显停顿。

 

主要垃圾收集和次要垃圾收集 :以上不同的算法被分别用来执行主要和次要的垃圾收集。通常主要是指对年老区执行标记压缩算法,而次要是指对edan区域执行分代复制算法。

 

分享到:
评论

相关推荐

    java学习知识点以及面试题

    理解其内存模型(堆、栈、方法区、本地方法栈、程序计数器)、垃圾收集机制(Minor GC、Major GC、Full GC)、内存调优(堆大小调整、新生代与老年代比例等)以及类加载机制对于优化Java性能至关重要。 7. **Java...

    Java知识体系精解

    Java的基础知识是整个Java知识体系的基石,其中包括配置环境变量、访问修饰符、对象的清理、集合框架、文件流操作、网络编程、多线程编程、异常处理、格式化和数字运算等。 配置环境变量是使用Java的第一步,它包括...

    java面试题库.zip

    1. **Java基础知识** - 类与对象:理解面向对象的基本概念,如封装、继承和多态。 - 异常处理:理解如何使用try-catch-finally语句块,自定义异常及其分类。 - 内存管理:理解栈和堆的区别,垃圾回收机制,了解...

    java程序员面试宝典pdf版

    一、Java基础知识 1. 类与对象:理解面向对象编程的基本概念,如封装、继承、多态,熟练掌握类的定义、对象的创建与使用。 2. 数据类型:包括基本数据类型和引用数据类型,了解它们的存储方式及使用场景。 3. 控制...

    Java面试题及答案大全(2023持续更新)

    Java面试题涵盖了许多核心领域,包括Java基础、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、设计模式、Spring框架、Spring Boot与Spring Cloud、Hibernate、MyBatis、消息队列如RabbitMQ和Kafka、...

    java面试宝典-自用

    6. **内存管理与垃圾回收**:理解Java内存模型(JVM),包括堆内存、栈内存、方法区、本地方法栈以及垃圾收集机制(GC),熟悉新生代、老年代、 Minor GC 和 Full GC。 7. **IO流**:掌握字节流、字符流、缓冲流、...

    Java面试题资料

    此外,还会涉及到异常处理、IO流、线程和集合框架的基础知识。 2. **Java集合框架**:面试中常常会问到ArrayList、LinkedList、HashSet、HashMap等集合类的区别和使用场景,以及它们的底层实现原理。理解集合的迭代...

    360 java 研发笔试题

    2. 垃圾收集:GC原理、垃圾收集器、内存分代模型。 3. 调优:JVM参数设置,内存泄漏检测。 以上只是部分可能出现在360 Java研发笔试题中的知识点,实际题目会根据职位需求和公司的具体技术栈有所调整。通过深入学习...

    java面试题大全

    在Java面试中,面试官通常会考察候选人的基础知识、编程能力、问题解决技巧以及对框架和并发的理解。本资源“java面试题大全”涵盖了华为、中兴、IBM等知名企业的经典面试题目,为准备Java面试的开发者提供了宝贵的...

    Java面试宝典2012版

    1. Java语言特性:介绍Java的面向对象特性,如封装、继承、多态,以及异常处理、垃圾回收等基础知识。 2. Java语法:包括变量、数据类型、运算符、流程控制语句(if、switch、for、while)、方法定义与调用。 3. ...

    java达内面试题库

    【Java达内面试题库】是专门为准备Java程序员面试者设计的一份综合性的题库,旨在帮助应聘者全面了解和掌握Java技术领域的核心知识点。这份题库覆盖了Java语言的基础到高级各个方面,对于想要在面试中脱颖而出的Java...

    509道Java面试题汇总与解析.zip

    它可能包含了大量的Java基础知识、进阶概念、设计模式、框架以及实际开发中的问题解答。 首先,Java的基础知识是面试中的常考点,包括但不限于: 1. Java语法:如变量、数据类型、运算符、流程控制语句(if、for、...

    JAVA面试题解惑系列.rar

    6. **JVM**:深入理解Java虚拟机的工作原理,包括内存模型(堆、栈、方法区、本地方法栈、程序计数器),垃圾回收机制(如GC算法、Minor GC、Major GC、Full GC),性能优化(如JVM参数调优,内存泄漏检测)。...

    2015年腾讯Java工程师笔试题.zip

    一、Java基础知识 1. 类与对象:理解面向对象编程的基本概念,如封装、继承、多态等。熟悉类的定义、构造器的使用,以及对象的生命周期管理。 2. 集合框架:深入理解List、Set、Map三大集合接口,以及ArrayList、...

    java面试题大汇总

    Java面试题大汇总,这是一份集合了众多Java开发者在面试过程中可能会遇到的问题集锦,旨在帮助准备面试的程序员巩固基础知识,提升技能水平。这里我们将深入探讨Java编程语言中的核心概念、高级特性以及常见问题。 ...

    疯狂Java面试题

    1. **Java基础** - 数据类型:包括基本数据类型与引用数据类型的区别,自动装箱与拆箱的概念。 - 变量、常量:理解作用域、生命周期和初始化规则。 - 运算符:掌握各种运算符的用法,如赋值、比较、逻辑等。 - ...

    模拟面试 Java题目以及答案

    在准备Java面试时,了解并掌握各种Java题目及答案是至关重要的,这可以帮助求职者提升自己的技能,并在面试中表现出色。以下是一些可能在模拟面试中遇到的Java相关知识点: 1. **基础概念**: - Java的历史与特性...

    Java面试宝典2011版

    Java面试宝典2011版是一本专为准备Java技术面试的求职者精心编写的指南,它涵盖了Java编程语言的基础、进阶以及面试中常见的问题。这份资料旨在帮助求职者提升自己的Java技术水平,理解面试官可能关注的技术点,从而...

    网上收集的Java面试题

    在IT行业中,Java作为一种广泛应用的编程语言,其面试题涵盖了众多方面,包括基础语法、面向对象、集合框架、多线程、JVM内存管理、网络编程、数据库交互、设计模式等核心领域。以下是对这些面试题知识点的详细解析...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制 自动化代码检查 sonar 代码规范 阿里巴巴Java开发规范...

Global site tag (gtag.js) - Google Analytics