Java堆空间:它是什么?

原文:https://javaeesupportpatterns.blogspot.com.ar/2012/02/java-heap-space-what-is-it.html

翻译:刘志鹏

本文将为您提供有关Java堆空间的高级概述,并有助于提高您在此领域的知识

背景

在第一次学习Java时,经常花费在Java语言本身,面向对象的编程原理,设计模式,编译等方面,而不是Java VM本身,比如Java堆内存管理,垃圾收集,性能调优等常被视为“高级”的话题。

初学者Java或Java EE程序员最终创建他的第一个程序或Web应用程序。Java堆内存问题经常被观察到,比如OutOfMemoryError对于Java初学者甚至中间人来说可能是一个难题。

听起来很熟悉?

Java堆空间 - 概述和生命周期

正确掌握Java VM堆空间是至关重要的; 包括Java初学者,所以我向你推荐的是在学习Java语言技术的同时学习这些原则。

您的Java VM基本上是您的Java程序的基础,它为您提供动态内存管理服务,垃圾回收,线程,IO和本地操作等等。

Java堆空间是运行时Java程序的内存“容器”,它向Java程序提供它所需的适当内存空间(Java堆,本地堆)并由JVM本身管理。

您的Java程序生命周期通常如下所示:

-         Java程序编码(通过Eclipse IDE等),例如HelloWorld.java

-         Java程序编译(Java编译器或第三方构建工具,如Apache Ant,Apache Maven等),例如HelloWord.class

-         Java程序启动和运行时执行,例如通过HelloWorld.main()方法

Java堆空间主要适用于第三步:运行时执行。对于HotSpot VM,Java堆空间分为3个孤岛:

-         用于短期和长期居住对象的Java堆(YoungGen&OldGen空间)

-         PermGen空间

-         原生堆

现在我们来剖析你的HelloWorld.class 程序,以便更好地理解。

-         在启动时,您的JVM会将一些静态程序和JDK库加载并缓存到本地堆中,包括本机库,映射文件(如程序Jar文件),线程(例如主启动线程)你的程序等

-         然后,您的JVM将把HelloWorld.class Java程序的“静态”数据存储到PermGen空间(类元数据,描述符..)

-         一旦启动程序,JVM就会管理并动态地 Java程序的内存分配给Java Heap(YoungGen&OldGen)。这就是为什么了解Java程序需要多少内存以便可以通过-Xms和-Xmx JVM参数适当调整Java Heap控制的容量这一点非常重要。分析,堆转储分析使您可以确定您的Java程序内存占用量

-         最后,JVM还必须从Java堆空间动态释放内存,以避免程序不再需要; 这被称为垃圾收集过程。通过JVM详细的GC或您选择的监视工具(如Java VisualVM)可以轻松监视此过程。

听起来很复杂?好消息是,在过去的十年中,JVM的成熟度已经得到了显着的提高,并为您提供了开箱即用的工具,让您了解您的Java程序Java堆分配情况,并对其进行微调。

     
     
         
         
推荐阅读

Spring思维导图,让Spring不再难懂(mvc篇)
秒杀系统解决方案
提供一个免费学习和交流的场所



JAVA葵花宝典

同学,看你骨骼惊奇,差一部宝典估计就能上天了,扫码关注修炼



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值