深入分析javaweb技术内幕笔记3---JVM内存管理


凌乱原文:

1.在java中的类和加载类的类加载器本身同样需要存储空间,在Sun JDK 中它们也被存储在丢中,这个区域叫做永久代(PermGen区)
2.在Java的类和方法中的局部变量包含原生数据类型(int、long、char等)和对象的引用都是静态分配内存的。
3.内存的分配是在对象创建时发生的,而内存的回收是以对象不再引用为前提
4.类的Class对象:当每个类被JVM加载时都会创建一个代表这个类的数据类型的Class对象

5.内存地址空间被划分为内核空间和用户空间。(为了保证操作系统的稳定性)


运行时数据区域:

1.线程共享:方法区、堆(存储对象)

2.线程隔离:虚拟机栈(栈帧:用来保存参数、局部变量、中间计算过程和其他数据、本地方法栈、程序计数器栈

NIO:

1.NIO使用java.nio.ByteBuffer.allocateDirect()方法分配内存

2.分配的内存使用的是本机内存而不是Java堆上的内存

3.不适合IO频繁发送很小数据的情况


JNI:

使本机代码(如C语言程序)可以调用Java方法,也就是通常所说的native memory


内存分配策略:

1.静态内存分配:在编译时就可以为它们分配固定的内存空间

2.栈式内存分配也称为动态存储分配

3.堆:当程序真正运行到相应代码时才会知道空间大小(效率低)


基于分代的垃圾收集算法:

1.Young区:分为Eden区和两个Survivor区(From、To区,两区始终有一个是空的);

Old区:Survivor区中对象足够老或是Eden区满将对象存放在Survivor区中,但Survivor区仍然存不下时直接存放在Old区。Old区满触发Full GC;

Perm区:存在主要是类的Class对象。

2.Hotspot的三种垃圾收集算法:

Serial Collector:JVM在Client模式下默认的GC方式(单线程、暂停应用程序);

Parallel Collector:(多线程、暂停应用程序)

1)ParNewGC   

2)ParallelGC (Server下默认的GC方式)   

3)ParallelOldGC(清除Heap中部分垃圾对象)

3.CMS Collector(使用NIO时可能发生内存泄漏)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值