初识JVM--java虚拟机的基本知识
JVM运行时的内存块
- pc寄存器:(线程独有)保存线程运行的java方法地址
- Java 虚拟接栈(线程独有):用于存储线程的栈帧
- Java堆(全局共享):随着Java虚拟机的启动 创建 存储着所有对象的实例以及数组对象,而且内置gc(垃圾回收机制)
- 方法区:运行常量池
- 本地方法栈:线程独有。
在jvm中gc(垃圾回收机制)是Java立足点之一。垃圾自动回收可以让Java程序员减少与内存打交道,更专注于业务的开发与实现。
垃圾回收需要实现如下几点
- 什么对象可以回收‘
- 何时回收
- 怎么回收
关于垃圾回收的对象定义,主要有两种:
- 检查这个对象是否有引用
比如:a =new A(); 那么对象A是有引用的。但这种方式会出现死锁,就是有两个或者多个对象之间相互引用,但这些对象都是没用的。怎么办?
- 检查这个对象是否根部对象可达。
只有一个root,root与其他对象直接或间接关联,如果这个对象根部不可达,那么这个对象就“垃圾”
利用根部是否可达的方式没有死锁,是目前jvm gc的主流实现方式。当然未来的路还很长,说不定还有更好的算法实现呢?
何时回收?
垃圾对象的产生,一般都是周期回收。在回收垃圾的时候,停止运行的java程序
怎么回收?
- 标记-清理:先将视为垃圾的对象标记,然后进行清理,这样清理出来的空间是不连续的
- 复制:将内存分成两半,然后将有效的复制到另一半。这样整理出来的内存空间是连续的
- 标记-清理-整理:针对标记-清理加了优化,整理出连续的内存空间。
进一步优化:
总会有一些对象会一直存在如静态变量,线程池。。。这些“老不死”就没必要老是检查它们了,可以减少检查和清理的周期。于是就有了,新生代,老生代,永久代
- 新生代:新建的对象,这里一般是局部对象,使用过后很快消亡。经过几个周期之后,将升级为老生代,新生代的存活率10%左右
- 老生代:从新生代升级为的老生代,拥有更顽强的生命,所以垃圾清理的算法和周期都与新生代不同
- 永久代:永久代并不是不可能死亡,清理还是要的只不过周期很长而已。
初识JVM--java虚拟机的基本知识的更多相关文章
- JVM,Java虚拟机基础知识新手入门教程(超级通熟易懂)
作者:请叫我红领巾,转载请注明出处http://www.cnblogs.com/xxzhuang/p/7453746.html,简书地址:http://www.jianshu.com/p/b963b3 ...
- (转)JVM——Java虚拟机架构
背景:最近开始忙着找工作了,把需要储备的知识再整理总结一遍!关于JVM的总结,是转自下面的连接.结合<深入理解java虚拟机>,看起来有更清晰的认识. 转载自:http://blog.cs ...
- JVM——Java虚拟机架构
0. 前言 Java虚拟机(Java virtualmachine)实现了Java语言最重要的特征:即平台无关性. 平台无关性原理:编译后的 Java程序(.class文件)由 JVM执行.JVM屏蔽 ...
- 从头捋捋jvm(-java虚拟机)
jvm 是Java Virtual Machine(Java虚拟机)的缩写,java 虚拟机作为一种跨平台的软件是作用于操作系统之上的,那么认识并了解它的底层运行逻辑对于java开发人员来说很有必要! ...
- jvm java虚拟机 新生代的配置
1.1.1.1. -Xmn参数 参数-Xmn1m可以用于设置新生代的大小.设置一个较大的新生代会影响老生代的大小,因为这两者的总和是一定的,这个系统参数对于系统性能以及GC行为有很大的影响,新生代一般 ...
- 初识:java虚拟机的内存划分
什么是内存? 内存是计算机中的重要原件,临时存储区域,作用是运行程序.我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存.Java虚拟机要运行程序 ...
- 深入了解JVM(Java虚拟机)
虚拟机 JRE由Java API和JVM组成,JVM通过类加载器(Class Loader)加类Java应用,并通过Java API进行执行. 虚拟机(VM: Virtual Machine)是通过软 ...
- 深入学习重点分析java基础---第一章:深入理解jvm(java虚拟机) 第一节 java内存模型及gc策略
身为一个java程序员如果只会使用而不知原理称其为初级java程序员,知晓原理而升中级.融会贯通则为高级 作为有一个有技术追求的人,应当利用业余时间及零碎时间了解原理 近期在看深入理解java虚拟机 ...
- JVM - Java虚拟机规范官方文档
Java虚拟机规范官方文档
- 5.1.3.jvm java虚拟机系统参数查看
不同的参数配置对系统的执行效果有较大的影响,因此,我们有必要了解系统实际的运行参数. 1.1.1.1. -XX:+PrintVMOptions 参数-XX:+PrintVMOptions可以在程序运行 ...
随机推荐
- 【centos7】添加开机启动服务/脚本
一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...
- ASP.NET 在 Windows Azure 环境中使用基于 SQLServer 的 Session
Session 嘛,占一点儿服务器资源,但是总归比 ViewState 和 Cookie 安全点儿,所以还是要用的. Windows Azure 环境中的 Web 服务器经由负载均衡调度,根本无法保证 ...
- swift-元组
元组: 将多个相同或者不同类型的值用一个小括号括起来就是一个元组.元组和结构体很像,实际上元组是复合类型.小括号内可以写任意类型,如果不定义类型,可以根据数据自动判断推算出类型 省略了类型 let p ...
- JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...
- Sublime Text 3 快捷键总结
以下是个人总结不完全的快捷键总汇,祝愿各位顺利解放自己的鼠标. 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同 ...
- hibernate注解CascadeType
http://blog.csdn.net/strong8808/article/details/6318994(参考) CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体, ...
- 使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- 用 JSP 实现对文件的相关操作
前段时间一直忙着作业,实验,动手的时间真是少之又少,今天终于可以继续和大家分享关于 JSP 的学习心得. 简单总结一下吧: JSP 理论性很强,感觉就是纯语法. 我更偏向于实际编写代码,这样更容易理解 ...
- Ettercap几种好玩的姿势
0x00 简单的arp欺骗 命令 ettercap -i 网卡 -Tq -M arp:remote /受害者ip/ /网关ip/ 以下是我欺骗192.168.1.102主机并模拟http-get请 ...
- [python]设计模式
需要说明:java跟python在思维模式上并不一样,java利用接口以及多态可以实现很多抽象上的东西,而python不行,其实以下很多设计模式写法并不适用也没有必要,更多是为了对比和帮助理解这些设计 ...