`

初识Java GC

 
阅读更多

   在Java中,对象内存的分配与回收是依靠自动运行在JVM中的Garbage Collection线程来完成。Java不像C、C++还需要为内存回收写代码,这也是java在这么多语言中比较独树一帜的特点。

   了解java回收器,首先我们先来区分一下java中比较重要的几个专业术语,像JDK、JVM、JRE、HotSpot VM,除此在外,了解JVM的结构和java堆内存结构也是必不可少的。

关键术语

Java API:

帮助开发者建立应用的类库集合。

Java Development Kits (JDK):

一系列包含编译、运行、打包、分发、监控 Java应用的工具。是支持Java程序开发的最小环境。

Java Virtual Machine (JVM):

JVM相当于一个抽象的计算机,Java程序按照JVM规范书写,JVM是操作系统实现Java虚拟机的一种规范,它可以将Java指令转换成底层操作系统对应的指令并执行他们, 从而达到跨平台的效果。

Java Runtime Environment(JRE):

JRE 包含JVM的实现和Java API,是支持Java程序运行的标准环境。

 

 JDK与JRE区别

首先我们来回顾一下JDK的文件结构:

  1.                                   java
  1.                                     |
  2.      _______________________________|____________________________________
  3.      |                                                                   |
  4. jdk1.6.0                                                                 jre6
  5.      ___________|____________________                              _____|______
  6.     |           |                    |                             |           |
  7.     bin         lib                  jre                          bin         lib   
  8.     |           |          __________|_____________________  
  9. java.exe    tools.jar     |                                |          
  10. javac.exe   dt.jar       bin                              lib                  
  11. javap.exe            _____|____ __________         ________|_______ ________ ________          
  12. javah.exe           |          |          |       |        |       |        |        |  
  13. javadoc.exe     java.exe    client      server  rt.jar    ext  security  applet    fonts  
  14.                 java.dll       |          |   charsets.jar |                    
  15.                 awt.dll     jvm.dll    jvm.dll        localedata.jar  

 

由上图我们会发现我们安装完JDK后会拥有了两套JRE,java/jre6 和java/jdk1.6.0/jre,前面的那套jre相比后面这条少了Server端的JVM,不过直接把它复制过来就OK了。

为什么会有两套jre呢?

这是因为JDK中有很多Java编写的开发工具(如java.exe、javac.exe、jar.exe等),他们的具体实现都放置在\lib\tools.jar中,而这些工具基本都是java程序写出来的,所以JDK理所应当也需要一套jre才行。所以java/jre6是运行一般程序使用的。

  1.   JVM是java实现跨平台最核心的部分,所有的java文件都会先被编译成.class文件,然后在JVM运行,JVM将解释.class文件中的JVM指令转换成本地系统CPU的指令去执行。
  2.   JRE是java最近的运行环境,光有JVM还不能让.class运行,因为在JVM解释class文件时需要调用解释需要的类库lib。我们可以从上图发现两套jre目录都是包含了bin和lib,我们可以将bin目录看作是JVM,而lib目录表示的就是我们解释所需要的类库,官方一点儿的叫法就是Java API,故,JVM和lib(Java API)构成了JRE。
  3.  JDK的安装目录下包含6个文件夹、一个src类库源码压缩包和其他几个声明文件。其中,真正在运行Java时起作用的是下面四个文件夹:bin、include、lib、jre。

这样我会发现一些关系:

JDK包含JRE,而JRE又包含JVM。

bin目录最主要的是编译器(javac.exe)

include :java 和JVM交互用的头文件

lib:类库

jre:Java运行标准环境

总结一下,(这里的bin和lib和jre下的bin和lib是不一样的)JDK是用于Java程序开发,而jre只能运行class而没有编译功能。

Java Hotspt 虚拟机

每种JVM的实现都可能在垃圾回收机制的实现上会不同。在SUN公司被收购之前,Oracle公司就有JRockit JVM,收购SUN公司之后,又获得了Hotspot JVM。目前Oracle维护着两种JVM的实现,据说不久的将来,这两种JVM实现会合二为一。

 

JVM结构

下图总结了JVM中的关键组件,在JVM的结构中,跟垃圾回收关系密切的两个组件是堆内存和垃圾回收器。堆内存是对象存储和垃圾回收器进行回收的运行时数据区。



 

Java堆内存

     了解堆内存在Java内存模型中的地位是比较必要的。在运行期,Java对象会被存储在堆内存中,当对象不再被任何其他对象引用(也即 不可达),那么该对象就符合了被垃圾回收器回收的条件。在垃圾回收进程运行期间,这些符合条件的对象和空间将会被回收。

     堆内存有一下三个主要区域:

    1.新生代:新生代又分Eden区和两个大小相等的S0(from)和S1(to)区

                    Eden区:新建的对象必须通过Eden进入运行时数据区

                    S0:较老的对象从Eden区移到S0

                    S1:较老的对象从S0移到S1

     2.老年代:S1中足够老还未回收的实例提升到年老代

     3.永久代:存储类的基本信息、元数据等等。

    

   值得一提的是永久代已经从Java SE 8中被移除了。


 

 

 

  • 大小: 47.5 KB
  • 大小: 27.1 KB
分享到:
评论

相关推荐

    初识Java_课后补充作业

    【Java初识篇】 在Java的世界里,初学者往往会面临许多挑战,但“初识Java_课后补充作业”正是为了帮助这些新手们提供必要的学习支持。这份资料旨在加深对Java编程语言的理解,提高学习效率,使初学者能更快地掌握...

    第01讲 初识Java.ppt

    第01讲 初识Java.ppt

    1.初识Java作业-1

    Java 语言以其“一次编译,到处运行”的特性在编程界占据着重要地位。这是因为Java程序首先被编译成与平台无关的字节码(.class文件),这些字节码随后在任何支持Java的平台上由Java虚拟机(JVM)执行。JVM是Java最...

    JAVA基础-初识JAVA

    【JAVA基础-初识JAVA】 Java是一种广泛使用的高级编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它的设计目标是“一次编写,到处运行”,这意味着编写好的Java程序可以在任何支持Java环境的...

    《初识Java微信公众号开发》源码

    《初识Java微信公众号开发》 http://www.imooc.com/learn/368 附件是整理的源码编译没有错误。 环境说明:tomcat8.5、jdk1.8、dom4j-1.6.1、XStream-1.4.9 程序总是报错“org.xmlpull.v1.XmlPullParserException”,...

    Java2上机实践1初识java

    在本实践课程“Java2上机实践1初识java”中,我们将深入探索Java编程的基础概念,通过一系列有趣的实例来加深理解。这个压缩包包含了实验1的相关材料,旨在引导我们逐步掌握Java语言的核心特性。 首先,我们要从"猜...

    初识java.zip

    "初识Java.zip"这个压缩包文件显然旨在帮助初学者入门Java编程。它包含的资源可能包括教学演示案例、上机练习参考答案以及课后作业参考答案,这些都是学习过程中非常重要的组成部分。 第一章"初识Java"通常会涵盖...

    初识java笔记

    课堂笔记,第一次学习java的课堂笔记,第一次学习java的课堂笔记

    Java基础知识思维导图(二)初识Java

    初识Java的内容包括:什么是Java、Java的平台版本、Java的构成(JavaSE、JavaEE、JavaME)、Java语言的特性、Java的编译和运行命令、JDK的安装等...

    Java程序设计--初识java 28.pdf

    Java程序设计--初识java 28.pdf

    Java基础精品课01-初识java录屏1.java概念简介.mp4

    Java基础精品课01-初识java录屏1.java概念简介.mp4

    Java基础精品课01-初识java.zip

    这个“Java基础精品课01-初识java”课程旨在为初学者提供一个全面的入门指南,帮助他们理解Java的核心概念和基本语法。 在Java编程语言中,我们首先会接触到的是它的关键字、数据类型以及变量。Java的关键字是预定...

    初识JAVA的知识

    ### 初识JAVA的知识:配置Java环境变量于Windows 7 #### 一、Java与环境变量的重要性 Java作为一门跨平台的编程语言,其运行环境的配置至关重要。无论是开发还是运行Java程序,都需要确保系统中正确设置了Java环境...

    初识java,用springBoot学习java.zip

    这个名为"初识java,用springBoot学习java.zip"的压缩包文件,显然是为了帮助初学者入门Java编程并深入理解Spring Boot的应用。 首先,让我们来了解一下Java的基础知识。Java的核心特性包括封装、继承、多态和抽象,...

    Java基础精品课01-初识java录屏2.java的编译和运行.mp4

    Java基础精品课01-初识java录屏2.java的编译和运行.mp4

    Java基础精品课01-初识java录屏6.标识符.mp4

    Java基础精品课01-初识java录屏6.标识符.mp4

    1.初识Java作业答案-1

    【初识Java】是学习Java编程语言的基础阶段,这一阶段主要涵盖了Java的核心概念和技术。以下是对标题和描述中涉及知识点的详细解释: 1. **JavaEE**:全称为Java Enterprise Edition,是Java平台的一个版本,专门...

    day02(初识Java)_第一版.rar

    在本压缩包“day02(初识Java)_第一版.rar”中,我们可以预见到它包含的是关于Java编程语言的基础教程。"初识Java"暗示了这个教程将引导我们了解Java语言的基本概念、语法和环境配置,是学习Java编程的理想起点。 ...

Global site tag (gtag.js) - Google Analytics