JVM内存管理简单剖析
Java是一个跨平台语言,屏蔽操作系统的差异,无需关心复杂内存管理,做到编写一次到处运行。其强大的能力源于Java Virtual Machine (虚拟机)默默的付出。代码运行在虚拟机之上,虚拟机运行在操作系统之上,虚拟机的实例就是操作系统上的一个进程。那么进程之下便是线程,线程是运行业务逻辑的核心。
从上Java虚拟机的职责上来看至少实现两大功能:
1、能够正确运行Java编写的代码
2、提供内存管理机制(垃圾回收机制)
Java Virtual Machine 有一个严格的规范,不同的厂商可以按照规范自己实现,这里针对的是HotSpot。
既然线程是核心,先从线程运行所需的资源角度剖析Java虚拟机运行时区域的划分:共享和私有的逻辑分区。
共享区域:方法区和堆,为所有线程提供基础和公共的信息
方法区:用于存储类的元数据信息、常量池、静态变量等
堆:存放对象实例和数组的区域
私有区域:虚拟机栈(本地方法栈)和程序计数器,程序运行私有的
虚拟机栈:Java(native)方法运行时动态内存模型,栈帧作为数据结构存储运行时需要需要的数据,对象引用方式是采用直接引用堆上的对象和方法区的对象类型信息,每个线程都有自己的栈
程序计数器:它是代码运行的指示器,如果运行的是Java方法它的值是下一个指令的地址,为了能够线程切换准确执行指令,因此每个线程需要配置一个程序计数器
从内存自动管理角度,需要从有利于垃圾回收的角度来剖析内存逻辑区域划分,堆是虚拟机管理的最大内存区域同时也是对象实例存储区域(JIT除外)。关注的重点就是堆空间的逻辑划分:Eden区,From Survivor区,To Survivor区,Old区。当对象申请分配空间时发现空间不足情况下就会采用可达性分析法在Eden进行垃圾对象判断,能够存活的移入Survivor区,最终进入老年区。犹如生物进化,适者生存。此时的堆内存逻辑区域可以更加细化。
综合上述两点就清晰描绘虚拟机为何要划分逻辑区域(内存区域划分设计目的)。
JVM内存管理简单剖析的更多相关文章
- Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收
很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...
- JVM内存管理及垃圾回收
一.JVM内存的构 Java虚拟机会将内存分为几个不同的管理区,这些区域各自有各自的用途,根据不同的特点,承担不同的任务以及在垃圾回收时运用不同的算法.总体分为下面几个部分: 程序计数器(Progra ...
- 现代JVM内存管理方法的发展历程,GC的实现及相关设计概述(转)
JVM区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...
- JVM内存管理及垃圾回收【转】
很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...
- 你应该这样理解JVM内存管理
在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这 ...
- JVM内存管理及GC机制
一.概述 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露 ...
- JVM内存管理的机制
Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...
随机推荐
- 凸多边形 HRBUST - 1429 计算几何_凸包_未调完
任选一个点作为起始点,将其他点按与该点连线的极角排序,二分查询点在哪两个射线之间, 并特别判断一下边界即可. Code: #include <cstdio> #include <al ...
- APICloud 上滑加载更多
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 你应该更新的 Java 知识
作者:dreamhead 出处:<你应该更新的Java知识>系列 你应该更新的 Java 知识 Tag:你应该更新的Java知识 Java Guava 集合 版权声明:转载时请以超链接形式 ...
- 一些AngularJs
# AngularJs部分 # 详情可参考文档----依赖注入--不是主动地获取而是被动的接收,需要什么就要什么,这样灵活较高,如:$scope ----指令--内部:ng- 如:ng- ...
- vue项目中,如何对static文件夹下的静态文件添加时间戳,以达到清除缓存
例如config.js文件是存放在static文件夹下,里面存放的是websocket信息,需要经常改动.改动了以后由于缓存信息,使其不生效,因此需要对引入的文件添加时间戳. 最新方法: 注意转义符的 ...
- typedef和define混用产生的错误
最近在写代码过程中,发现一个问题,编译总是过不去,报错如下: stdint.h::: error: duplicate 'unsigned' stdint.h::: error: 'long long ...
- Vue基础知识点
基础知识: vue的生命周期: beforeCreate/created.beforeMount/mounted.beforeUpdate/updated.beforeDestory/destorye ...
- 【codeforces 794C】Naming Company
[题目链接]:http://codeforces.com/contest/794/problem/C [题意] 有n个位置; 两个人; 每个人都有n个字符组成的集合s1,s2(可以有重复元素); 然后 ...
- NYIST 1107 最高的奖励
最高的奖励 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 请问:挖掘机技术哪家强?AC了告诉你! 给你N(N<=3*10^4)个任务,每个任务有一个截止完成时 ...
- Winserver服务器-AD字段对照简图
AD字段对照简图