Java Virtual Mechine

Java Virtual Mechine

Garbage Collector Gc tuning

1.what is garbage?

lost pointer

2.how to find it?

reference count(python)

Root reaching

3.GC algorithms

4.available collectors

GC随着内存的大小不断增长而演进

几兆 - 几十兆:Serial单线程STW垃圾回收 年轻代 老年代

几十兆 - 上百兆1G:parallel并行多线程(JDk1.8默认)

数十G:Concurrent GC(CMS+ParNew)

新生代和老年代

5.tuning
冯诺依曼结构的计算机体系:

程序是如何运行的:从硬盘load to memory形成进程,进程包括指令和数据。cpu将内存中的指令一条一条拿去执行,需要数据就拿数据。

程序的栈(栈帧stack frame)和堆

栈:每个线程一个,先进后出。栈帧:每个方法一个,方法结束,栈空间自动释放。

堆:执行过程中手工new出来的,不会自动释放需要垃圾回收器来管理

最难调试的bug

野指针:同一个对象,存在两个指针一个释放了,另一个不知道还在使用(不在指向任何对象的指针)NullPointerExcetion

并发问题:多线程访问同一块内存空间

语言的发展历史
C/C++:

手工管理 malloc free / new delete

忘记释放 - memory leak 内存泄漏 - out of memory

释放多次 产生及其难以调试的bug,一个线程空间莫名其妙被另外一个释放了

开发效率很低

Java python go

方便内存管理的语言

GC - Garbage Collector - 应用线程只管分配,垃圾回收器负责回收

posted @ 2023-01-06 07:00  _Saul  阅读(58)  评论(0)    收藏  举报