深入理解Java虚拟机(第一版)-第二章读书笔记
来源:互联网 发布:linux卸载软件apt 编辑:程序博客网 时间:2024/06/13 05:22
概述
第二章的标题是:Java内存区域与内存溢出异常
线程私有的
程序计数器
当前线程被重新调度到CPU中执行的时候,为了能恢复到上次的执行位置,需要使用一个计数器。
Java虚拟机栈
栈存储的信息
对象引用和基本类型
生命周期
跟线程一致。当线程结束后,线程执行的方法中定义的局部变量引用所占用的内存将会被释放掉。(注意:不是说堆上面的对象的内存被释放掉,堆上的对象只能默默的等待垃圾回收)
一个线程占用多少栈空间
默认是一兆,也可以使用Xss指定。
小心递归调用的层次
如果递归调用的层数太多,会撑爆栈空间。
为谁服务
为虚拟机执行Java方法服务的。
本地方法栈
跟Java虚拟机栈一样的,只不过本地方法栈是为虚拟机调用Native方法服务的。
备注
程序计数器、Java虚拟机栈、本的方法栈都无需过多的考虑垃圾回收的问题,因为它们都是随着线程生也随着线程死。线程一旦结束,内存也就回收了。
线程共享的
Java堆
堆存储的信息
对象的实例。
方法区(别名:永久代)
方法区存储的信息
- 已经被虚拟机加载的类信息
- 常量
- 静态变量
- 即时编译器编译后的代码
垃圾回收
主要是针对常量池和Class对象的卸载的垃圾回收。
运行时常量池
- 每个Class对象都有一个静态的常量池,当虚拟机加载完类后,会把这个静态常量池的内容存放到运行时常量池中;
- 运行时常量池是方法区的一部分。
总结
以上都是JVM运行时数据区的一部分。
非运行时数据区
直接内存(堆外内存)
像使用了Java NIO、Netty等技术,会大量使用到直接内存,在JAVA中这块内存是通过Native方法来申请的。由于减少了应用到内核的数据拷贝次数,可以提高性能。
当老年代内存满了,触发Full GC的时候,会顺便回收直接内存。当然也可以使用System.gc()
,但是虚拟机会不会触发GC则是未必的。
阅读全文
2 3
- 深入理解Java虚拟机(第一版)-第二章读书笔记
- 深入理解Java虚拟机(第一版)-第三章读书笔记
- 《深入理解Java虚拟机》读书笔记-第二章
- 读书笔记_深入理解Java虚拟机(第二版)
- 《深入理解Java虚拟机》读书笔记---第二章 Java内存区域与内存溢出异常
- 《深入理解Java虚拟机》读书笔记:第二章Java内存区域与内存溢出异常
- 《深入理解Java虚拟机》读书笔记:第二章Java内存区域与内存溢出异常
- 深入理解Java虚拟机读书笔记--第二章 Java 内存区域与内存溢出异常
- 深入理解java虚拟机第二章
- 《深入理解JAVA虚拟机》第二章
- 深入理解JVM虚拟机--读书笔记(第二章)
- 《深入理解Java虚拟机》读书笔记
- 深入理解java虚拟机读书笔记
- 深入理解JAVA虚拟机--读书笔记
- 《深入理解Java虚拟机》读书笔记
- 深入理解Java虚拟机读书笔记
- [读书笔记]深入理解java虚拟机
- 深入理解Java虚拟机 - 读书笔记
- 一文看懂中美AI产业布局,美国领衔芯片、算法、NLP领域
- 未来货运:无人驾驶技术和卡车司机如何配合?
- Docker之应用数据管理(volume/bind mount/tmpfs)
- 微服务架构多“微”才合适
- 关于codeforces比赛规则介绍
- 深入理解Java虚拟机(第一版)-第二章读书笔记
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 报名丨参加中关村大数据日,读懂数字经济!
- 看看编程大牛们是怎么摆放桌面文件的
- Struts2框架使用及原理及其拦截器解析
- 满二叉树、完全二叉树、完美二叉树等概念的解释
- Android源码阅读-编译8.0源码
- Access restriction: The type XX is not API (restriction on required library 'XXX/Ja
- UE4蓝图节点翻译---Add AIPerception Stimuli Source Component