JVM内存管理

一:  首先弄明白两个概念:物理内存和虚拟内存

  •   物理内存:通常所说的RAM(随机存储器),有一个存储单元寄存器,存储计算单元执行指令的中间结果。物理内存是真实存在的,例如:内存条
  •   虚拟内存:利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘被称作交换空间。虚拟内存保证多个线程同时执行时可以共享同一块物理内存。但只是空间上共享,逻辑上不是共享的,而且相互支架不能直接访问。

二:       什么是内核?什么是用户空间?

  • ·  内核是操作系统运行时所需要的内存,也就是系统空间。
  •          用户空间是提供给用户线程使用的一部分空间。

  内核空间是是用来存放系统进程数据的;用户空间使用来存放用户进程数据的。如果不进行划分,就会造成数据混乱,影响系统的正常运行。分开存放保证了操作系统和用户进程之间互不影响,保证系统的稳定性,同时也便于管理。更重要的是将用户数据和系统数据隔离,就能够对各个部分的数据访问进行控制。这样就保障了用户进程不能够修改系统进程,防止用户进程恶意修改系统进程,影响系统进程的使用。

三:内部溢出和内存泄漏

  1.   内部溢出:程序再申请内存时,如果没有足够的内存空间,就会抛出out of memory    
  2.      内存泄漏:  应该被垃圾回收的对象,却没有被回收,导致内存空间被浪费,这就是内存溢出。内存泄漏可能导致内存溢出。
  •   内存溢出产生的原因:
      •     一次加载的数据量过大,
      •        集合中存在对象的引用,但是是用完之后,没有被垃圾回收,产生内存泄漏,导致内存溢出。
      •        代码中存在死循环或者产生过多的重复对象
    •  内存溢出的解决方案:
      •   修改虚拟机的启动内存,增加内存空间(-Xms -Xmx)
      •        检查日志,查看导致内存溢出的原因,然后找出解决的方案
      •         检查代码,找出可能发生内存溢出的代码,就行修改       

四:JVM内存分配策略

  •   静态内存分布:在编译时就可以确定对象需要的空间大小,在编译的过程中就一次性分配内存空间,
  •        堆内存分布:    编译期间并不知道需要的空间大小,只有当程序运行到响应的代码时,才知道空间的大小,这时候进行内存空间的分配。
  •        栈内存分配:     动态存储分布,在程序运行时分配内存空间,是一种先进后出的分配策略

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Enterprise Library 4 缓存应用程序块的设计

缓存应用程序为以下目的而设计: 提供一个大小可管理的 API 集合。 允许开发人员添加标准的缓存操作到他们的应用程序中,而不用学习应用程序块的内部工作。 ...

2126
来自专栏前端vue

Node中间件multer文件上传实践

单文件上传,接收一个以fieldname命名的文件,文件信息保存在req.file

1102
来自专栏Jackie技术随笔

多进程TCP并发服务器

我们的期望应该是一台服务器同时为多个客户服务。实现并发服务器最简单的办法就是为每个客户均fork一个子进程。

1.2K8
来自专栏Java帮帮-微信公众号-技术文章全总结

Java中数据库连接池原理机制详解【面试+提高】

Java中数据库连接池原理机制详解 【面试+提高】 连接池的基本工作原理 1、基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低...

7998
来自专栏Java架构

Java 程序员须知道和掌握的 Linux 命令

1883
来自专栏梦魇小栈

crontab 踩坑之绝对路径

由于放假后网络原因不方便使用电脑,需要创建一个 crontab 定时任务,用来在每天固定时间执行一个 Shell 脚本

4733
来自专栏Python小屋

Python操作Excel文件中多WorkSheet模拟数据库内连接查询

严格意义上来讲,是可以把Excel文件看作数据库的,C#通过OLEDB.net就可以使用SQL语句操作Excel文件中的数据。 本文代码使用Python扩展库o...

3514
来自专栏蓝天

快速上手,协程剖析

协程也叫微线程,英文名称为coroutine。一个进程可以有多个线程,一个线程可以有多个协程,这是协程和线程间的关系。不同的是,线程由系统调度,但协程需要...

1131
来自专栏性能与架构

nginx 缓存机制

Nginx缓存的基本思路 利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容 Nginx服务器启动后,会对...

9376
来自专栏小李刀刀的专栏

在WebKit中并行加载外部脚本译:

作者:Tony Gentilcore 原文:http://webkit.org/blog/1395/running-scripts-in-webkit/ Web...

3517

扫码关注云+社区

领取腾讯云代金券