StringTable调优和直接内存释放原理

37 StringTable垃圾回收

字符串常量也可以被垃圾回收。
1、设置虚拟机参数。

底层类似于哈希表实现,数组+链表
桶,buckets

38 StringTable调优

调整hashtable桶的个数

39 调优

intern的应用

40 调优

41 直接内存

不属于java虚拟机的内存,属于操作系统内存。
主要用于NIO操作,数据读写的缓冲区。
分配回收成本高,读写性能高。

directBuffer()
读写大文件性能很高。

42 基本使用

磁盘文件,
系统内存  系统缓冲区
java堆内存 byte[]

使用directbuffer后
	在操作系统划分一块缓冲区,java和磁盘都可以共享的。减少了缓冲区的一次复制。

43 直接内存-内存溢出

分配的内存,不受java虚拟机垃圾回收。

是否内存溢出?
	会导致内存溢出。
	direct buffer memory

44 直接内存-释放原理

不受虚拟机内存管理,是否会被回收?
不被java管理
使用工具任务管理器。
进程对内存的占用情况

45 直接内存-释放原理

直接内存的分配和释放通过unsafe方法管理

必须主动调用
unsafe.freeMemory(base);

46 释放原理

cleaner=Cleaner.create(this,new Deallocator(base,size,cap));
借助了java的虚引用的机制。

47 禁用显式回收对象

byteBuffer内部,使用了cleaner虚引用监测byteBuffer对象,一旦byteBuffer对象被垃圾回收,又refererenceHandler线程通过Cleaner的clean方法调用freeMemory释放直接内存。

使代码中的system.gc()无效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值