
Jdk学习
文章平均质量分 64
liu-shilong
这个作者很懒,什么都没留下…
展开
-
Jdk调优实战
堆外内存导致溢出错误例如一个2G内存的物理机,将1.6G划入java虚拟机中,这样物理机能够使用的直接内存最多只有0.4G,虽然java虚拟机会对直接内存进行回收,但是直接内存满后无法像虚拟机内存那样通知垃圾回收器进行回收,因此直接内存满后再写入写的数据会导致堆外内存泄漏 解决方案 调整虚拟机堆的大小,对直接内存进行池化处理,对所有内存分配进行限制外部命令导致程序变慢 在java程序中操作shell脚本RunTime.getRu...原创 2021-08-19 02:49:46 · 300 阅读 · 2 评论 -
经典垃圾回收器
Serial收集器 Serial是最起初、历史最悠久的收集器,是一个单线程收集器,在进行收集时必须暂停所有工作线程 stop the world ,用户不可知。迄今为止Serial依然是hotspot运行在客户端模式下新生代的收集器,简单高效,没有线程交互开销。ParNew收集器 ParNew收集器时Serial收集器的多线程版本,在单核处理器的环境中绝不会有比Serial收集器更好的效果,由于线程交互开销,即使通过超线程伪双核技术也不能百分百超越Serial...原创 2021-08-19 01:05:14 · 179 阅读 · 0 评论 -
hotspot算法细节实现
根节点枚举 垃圾回收器在根节点枚举(查找Gc Roots引用链)这一步都需要暂停用户线程。保证整个枚举过程中子系统看起来就像冻结在某个时间点,不会出现根节点集合及引用过程还在不断变化情况。虚拟机不需要一个不漏的查完所有执行上下文及引用位置。在hotspot中采用OopMap的数据结构,一旦类加载动作完成后hotspot就会把对象内偏移量上的类型数据计算出来,在即时编译过程中,也会在特定的位置记录下栈里的和寄存器哪里的位置是引用,这样收集器扫面时就可以直接获得这些信息,不需要一个不漏从Gc ...原创 2021-08-18 23:00:58 · 205 阅读 · 0 评论 -
垃圾回收算法与分代机制
对象已死的判定引用技术算法:在对象中添加一个引用计数器,每当一个新的引用指向对象时就将引用计数器+1,当引用失效时就-1,最后为0的就是垃圾。引用计数法有着明显的缺陷,当出现以下相互引用的代码时由于A和B相互引用了一次,引用计数器永远不会置零,则堆中将存在无法被回收的垃圾。User A = new User();User B = new User();A = B;B = A; A = null;B = null;可达性分析算法 Java采用的...原创 2021-08-17 05:08:29 · 191 阅读 · 0 评论 -
Hotsopt虚拟机管理对象
对象的创建 在Java中创建对象通常只是一个 new 关键字,当Java虚拟机遇到一条 new 的字节码时首先会去检查这个指令的参数是否能在常量池中定位到一个类的引用,并检查这个符号引用代表的类是否已经被加载、解析和初始化过,如果没有则执行相应的类初始化流程。类加载检查通过后,虚拟机将为新生对象分配内存,对象内存大小在类加载后可完全确定。 指针碰撞:加入堆被划分成两块,一块是空闲的堆,另一块是已使用的堆,对象分配内存只需要将已使用的内存像空暇内存进行扩充,如果两块内存交...原创 2021-08-17 04:04:33 · 450 阅读 · 0 评论 -
Java内存管理
下图为Java虚拟机运行时的内存图,其中虚拟机栈,本地方法栈,程序计数器为线程私有,方法区和堆为线程共享区域。程序计数器 程序计数器是一块较小的内存空间,可以看作当前执行的字节码行号指示器,字节码解释器改变计数器选取下一条执行的字节码指令。程序控制流中的分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。由于Java虚拟机通过线程轮流切换分配处理器执行时间实现多线程,因此为了线程切换后可恢复到正确位置每个线程都需要一个独立的计数器。如...原创 2021-08-17 03:16:02 · 159 阅读 · 0 评论 -
Java存储
在程序运行时有五个区域可以存储数据:寄存器、堆栈、堆、常量存储、非RAM存储寄存器这是最快的存储区,因为它位于不同其他存储区的地方---处理器存储部。但寄存器的数量及其有限,所有寄存器根据需求进行分配。你不能直接控制,也不能再程序中感觉到寄存器存在的任何迹象(另一方面,C和C++允许你向编译器建议寄存器的分配方式)堆栈位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器哪里获得直接支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。...原创 2021-08-17 02:28:17 · 99 阅读 · 0 评论 -
JDK发展
Write once , Run anyway 这是Java语言的特性,支撑这种特性的正是Jdk,Jdk中提供了一个纯解释执行的Java虚拟机。 1999年5月8日,hotsopt虚拟机诞生,此虚拟机最初由一家名为Longview Technologies 的小公司开发,由于优异表现(hotsopt 拥有优异的热点探测技术,在Jdk2之前只能使用外挂热点探测技术并且效果并不理想),1997年被sun公司收购,作为当时Jdk2版本附加程序提供,后Jdk3版本后成为Jdk的默认...原创 2021-08-17 02:04:25 · 118 阅读 · 0 评论