热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入理解Java虚拟机(第一版)-第二章读书笔记

概述第二章的标题是:Java内存区域与内存溢出异常线程私有的程序计数器当前线程被重新调度到CPU中执行的时候,为了能恢复到上次的执行位置,需要使用一个计数器。

概述

第二章的标题是:Java内存区域与内存溢出异常


线程私有的

程序计数器

当前线程被重新调度到CPU中执行的时候,为了能恢复到上次的执行位置,需要使用一个计数器。


Java虚拟机栈


栈存储的信息

对象引用和基本类型

 

生命周期

跟线程一致。当线程结束后,线程执行的方法中定义的局部变量引用所占用的内存将会被释放掉。(注意:不是说堆上面的对象的内存被释放掉,堆上的对象只能默默的等待垃圾回收)

 

一个线程占用多少栈空间

默认是一兆,也可以使用Xss指定。

 

小心递归调用的层次

如果递归调用的层数太多,会撑爆栈空间。

 

为谁服务

为虚拟机执行Java方法服务的。

 

本地方法栈

跟Java虚拟机栈一样的,只不过本地方法栈是为虚拟机调用Native方法服务的。

备注

程序计数器、Java虚拟机栈、本的方法栈都无需过多的考虑垃圾回收的问题,因为它们都是随着线程生也随着线程死。线程一旦结束,内存也就回收了。


线程共享的

Java堆

堆存储的信息

对象的实例。

 

方法区(别名:永久代)

方法区存储的信息

  • 已经被虚拟机加载的类信息
  • 常量
  • 静态变量
  • 即时编译器编译后的代码

 

垃圾回收

主要是针对常量池和Class对象的卸载的垃圾回收。

 

运行时常量池

  • 每个Class对象都有一个静态的常量池,当虚拟机加载完类后,会把这个静态常量池的内容存放到运行时常量池中;
  • 运行时常量池是方法区的一部分。

 

总结

以上都是JVM运行时数据区的一部分。

 

非运行时数据区

直接内存(堆外内存)

像使用了Java NIO、Netty等技术,会大量使用到直接内存,在JAVA中这块内存是通过Native方法来申请的。由于减少了应用到内核的数据拷贝次数,可以提高性能。

当老年代内存满了,触发Full GC的时候,会顺便回收直接内存。当然也可以使用System.gc(),但是虚拟机会不会触发GC则是未必的。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • JNI技术实践小结转自http:sett ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 《Java并发编程》自旋锁与互斥锁两者非常类似,只是调度策略的不同。对于独占资源的访问,互斥锁在获得锁之前将一直处于休眠状态,自旋锁则是不 ... [详细]
  • handler机制_Handler机制与原理
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Handler机制与原理相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 【JVM技术专题】深入分析CG管理和原理查缺补漏「番外篇」
    前提概要本文主要针对HotspotVM中“CMSParNew”组合的一些使用场景进行总结。自Sun发布Java语言以来,开始使用GC技术来进行内存自动管理࿰ ... [详细]
  • Maven 无法打包jar到 Tomcat
    今天新来的同事,让他调试短信验证的接口。跟我说添加的aliyun的短信验证服务无法在tomcat上运行。然后给我看了报错信息:java.lang.NoClassDefFoundEr ... [详细]
  • 开发笔记:Java多线程深度探索
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java多线程深度探索相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 微服务应用性能如何?APM监控工具来告诉你
    当微服务系统越来越庞大,各个服务间的调用关系也变得越来越复杂,需要一个工具来帮忙理清请求调用的服务链路。之前使用的是Sleuth+Zipkin的解决方案,最近发现应 ... [详细]
  • 方舟等级生成工具_关于方舟编译器的几个小疑问
    之前了解了一下方舟编译器,但是很粗,今天在知乎上看了各种大神关于方舟编译器的说法,其实一直以来就有几个问题,我看了知乎上的说 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
author-avatar
深深i
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有