名词意义解释

1、HotSpot VM

 它是Sun/Oracle JDK和OpenJDK的默认虚拟机

2、Minor GC

从年轻代空间(包括 Eden 和 Survivor 区域)回收的内存。

Major GC

是清理永久代。

Full GC

是清理整个堆空间—包括年轻代和永久代。

3、Native Method

  一个Native Method就是一个java调用非java代码的接口。
  一个Native Method是这样一个java的方法:该方法的实现由非java语言实现。

4、Heap Memory和Native Memory

Heap MemoryNative Memory
供Java应用程序使用的供JVM自身进程使用的
其内部各组成的大小可以通过JVM的一系列命令行参数来控制没有相应的参数来控制大小,其大小依赖于操作系统进程的最大值(对于32位系统就是3~4G,各种系统的实现并不一样),以及生成的Java字节码大小、创建的线程数量、维持java对象的状态信息大小(用于GC)以及一些第三方的包,比如JDBC驱动使用的native内存。

Native Memory里存些什么?
1.管理java heap的状态数据(用于GC);
2.JNI调用,也就是Native Stack;
(JNI是Java Native Interface的缩写,中文为JAVA本地调用。)
3.JIT(即使编译器)编译时使用Native Memory,并且JIT的输入(Java字节码)和输出(可执行代码)也都是保存在Native Memory;
(JIT:just in time,即时编译)
4.NIO direct buffer。对于IBM JVM和Hotspot,都可以通过-XX:MaxDirectMemorySize来设置nio直接缓冲区的最大值。默认是64M。超过这个时,会按照32M自动增大。
5.对于IBM的JVM某些版本实现,类加载器和类信息都是保存在Native Memory中的。

DirectBuffer的好处:
DirectBuffer访问更快,避免了从HeapBuffer还需要从java堆拷贝到本地堆,操作系统直接访问的是DirectBuffer。DirectBuffer对象的数据实际是保存在native heap中,但是引用保存在HeapBuffer中。
另外,DirectBuffer的引用是直接分配在堆的Old区的,因此其回收时机是在Full GC时。因此,需要避免频繁的分配DirectBuffer,这样很容易导致Native Memory溢出。

5、PermSize与MaxPermSize

-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。

例:如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;四分之一是1024MB,这就是MaxPermSize默认大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值