——读《深入理解Java虚拟机JVM高级特性与最佳实践》自我整理
熟悉Java的人都知道Java的一个特点:一次编译,到处运行。但是为什么只能Java实现这个特性,而比Java执行效率更高的c、c++没有这个特性呢?首先到处运行指的是不同的操作系统 windows linux unix 等等,c/c++在不同的系统下或者不同的编译器下,其编译的规则是有些不同的,这样做是为了更大限度地提升它的执行效率,所以不得不在兼容性方面做了妥协,而Java不一样,它在不同的操作系统上面又封装了一个相当于是自己的操作系统,这就是Java虚拟机(JVM),只要每个操作系统上装上这个JVM就都可以运行基于这之上的Java程序了。
说起Java与c的不同,可能大家第一反应是Java是个面向对象的语言,第二反应就是Java拥有自动内存管理机制。那么Java的内存管理机制到底是怎样的?首先从字面上看自动内存管理,肯定管理的是内存的从分配、使用、回收、再使用的一个整个的闭环流。
在了解内存管理之前,我们首先要对JVM运行时的数据区的结构有所了解,看下图:
线程共享区代表着里面的数据区随着线程的生命周期从生到死,非线程共享区是在JVM启动时创建,关闭时销毁的。
程序计数器:它表示的当前线程执行的字节码的行号,因为在多线程环境中,操作系统对多线程采用的是轮流切换并且分配处理时间的机制,为了要保证每个线程在切换至其它线程时其执行进度不丢失,所以每个线程中都会有这么一个计数器。
虚拟机栈:它描述的是Java方法执行的内存模型,每次执行方法时会产生一个栈帧,包含局部变量栈、操作数栈、方法出口等,方法的执行从开始到结束就是这个栈帧入栈出栈的过程。
本地方法区:和虚拟机栈类似,不过它处理的是 Native方法的内存模型。
堆:内存回收中的主要回收区域,也是JVM管理的内存中的最大一块,里面存放的都是对象的实例。
方法区:这里面储存的都是一些类的相关信息、静态变量、常量、编译过后的代码等,主要是对堆的一个描述逻辑的区域。
这几个区域的联系就像下图一样:
例如在一个方法中有一个对象:Object obj=new Object(); 那么在这个方法中的Object obj 指向了一个堆中的实例obj(通过new Object()在堆中创建),同时在堆中的这块内存中还储存了一个指向方法区中这个对象相关信息的一个指针。
分享到:
相关推荐
在实际开发中,理解这些内存分配原则可以帮助我们有效地管理资源,比如避免内存溢出,优化对象的创建和使用,以及理解和利用垃圾回收机制。Java内存管理是一个深度和广度并存的话题,需要不断学习和实践来提升。
### Java中堆内存与栈内存分配浅析 #### 一、引言 在Java编程语言中,内存管理是一项至关重要的技术。程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的...
### 浅析JVM:垃圾回收与内存模型 #### 一、JAVA语言及JVM简介 **JAVA语言**是由Sun Microsystems公司(后被Oracle收购)的詹姆斯·高斯林(James Gosling)等人于1995年设计并发布的。JAVA语言是一种通用型、面向...
在Java编程中,垃圾回收机制(Garbage Collection, GC)是一个核心特性,它自动管理内存,使得开发者无需手动释放内存,从而降低了内存泄漏的风险。Java虚拟机(JVM)负责执行垃圾回收,但其工作原理对于优化程序...
Java中的GC(Garbage Collection)垃圾回收器是Java虚拟机(JVM)的关键特性,它自动管理内存,确保程序在运行过程中不会因为手动管理内存而导致内存泄漏或虚悬引用等问题。GC的主要目标是释放不再被程序引用的对象...
jvm垃圾收集机制与内存分配策略 jvm类加载机制 Java的内存模型 锁优化 Think In Java Java容器 Java并发 Java Concurrency in Practice 对象的共享 对象的组合 基础构建模块 JavaGC监控与优化 垃圾回收机制 垃圾回收...
然而,直接内存的使用需要额外的注意,因为它不会受到JVM的垃圾回收机制的管理。 #### 四、事件处理机制 Netty的事件处理机制是基于`ChannelHandler`和`ChannelPipeline`实现的。每个`Channel`都有一个对应的`...
本文详细解析了Java中对象创建的整个流程,涵盖了类信息存储、对象引用、对象实体的内存分配以及实例化过程中方法的调用。 首先,Java的内存结构是理解对象创建的基础。JVM(Java虚拟机)为每一个运行中的Java应用...
在Java编程语言中,对象的创建是程序运行的基础,它涉及到类的实例化、内存分配以及构造函数的调用等多个步骤。本篇文章将深入探讨Java中对象创建的全过程,帮助开发者理解这一核心概念。 首先,我们需要了解的是...