JVM知识

堆(Heap)和非堆(Non-heap)内存

简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的。

堆内存分配 
    JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。 
非堆内存分配 
    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 
JVM内存限制(最大值) 
    首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然 可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G),而64bit以上的处理器就不会有限制了。

来自:http://blog.csdn.net/softwave/article/details/6238747

时间: 2024-10-21 14:07:20

JVM知识的相关文章

【JVM 知识体系框架总结】

JVM 内存分布 线程共享数据区: 方法区->类信息,静态变量 堆->数组对象 线程隔离区 虚拟机栈-> 方法 本地方法栈->本地方法库 native 堆.程序计数器 JVM 运行数据 程序计数器 线程隔离 ,比较小的内存空间,当前线程所执行的字节码的行号 线程是一个独立的执行单元,由 CPU执行 唯一没有 OOM 的地方,由虚拟机维护,所以不会出现 OOM 虚拟机栈 执行的是Java方法 方法的调用就是栈帧入虚拟机栈的过程 栈帧:局部变量表(变量) .操作数栈(存放a+b的结果

[转帖]【JVM 知识体系框架总结】

https://www.cnblogs.com/mousycoder/p/11612448.html JVM 内存分布 线程共享数据区:方法区->类信息,静态变量堆->数组对象 线程隔离区虚拟机栈-> 方法本地方法栈->本地方法库 native 堆.程序计数器 JVM 运行数据 程序计数器 线程隔离 ,比较小的内存空间,当前线程所执行的字节码的行号线程是一个独立的执行单元,由 CPU执行唯一没有 OOM 的地方,由虚拟机维护,所以不会出现 OOM 虚拟机栈 执行的是Java方法 方

刚从京东面试回来,我才知道这些JVM知识有多重要

面试题关于JVM的知识之前也写过相关的文章整理,但是从京东面试后,才发现这些JVM的知识点尤为重要,所以特意整理出来以供大家参考.1.什么是类的加载?2.哪些情况会触发类的加载?3.讲一下JVM加载一个类的过程4.什么时候会为变量分配内存?5.JVM的类加载机制是什么?6.双亲委派机制可以打破吗?为什么答案放在文章的最后,来不及看原理也可以直接跳到最后直接看答案.深入原理类的生命周期类的生命周期相信大家已经耳熟能详,就像下面这样:不过这东西总是背了就忘,忘了又背,就像马什么梅一样,对吧?其实理解

JVM知识学习与巩固

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间. 以下转自:http://blog.csdn.net/ning109314/article/details/10

jvm知识小结

heap java的内存区称作堆(heap),用来保存类和对象 heap被分为为3个称作域(generation)的主要部分,对应于对象不同的生存期 这三个generation分别为:新域(young generation),旧域(tenured generation),永久域(perm generation) 标记为virtual的部分被保留,在必要时才实际分配出去 young generation由eden和两个救助空间survivor(from救助空间和to救助空间)组成 eden用于生成

JVM知识(上)

目录 什么是JVM? JVM的生命周期 JVM的体系结构 JVM的数据类型 java虚拟机被称为"虚拟",因为它是一个抽象的计算机定义的规范.要运行一个Java程序,需要一个抽象的规范的具体实现.以下内容主要还是参考<Inside JVM> 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.JVM三种不一样的地方:抽象的规范

JVM知识总结-运行时区域划分

区域简介 JVM运行时区域有些随着虚拟机进程的启动而存在,有些依赖于用户线程的启动和结束而建立和销毁,大致分为以下几类:方法区,虚拟机栈,本地方法栈,堆,程序计数器,概念图如下(源于<深入理解JAVA虚拟机-JVM高级特性>): 程序计数器 当前线程所执行的字节码的行号指示器,是一块各个线程私有的内存,每个线程都有一个独立的程序计数器: 如果线程执行的是一个JAVA方法,计数器记录的是虚拟机字节码指令的地址,如果执行的是一个Native方法,计数器值为空(Undefined): 唯一一个在JV

JVM基本知识总结

大概两三个月之前阅读了<深入理解Java虚拟机>(周志明著),也为了加深印象,这里简单的做下总结,想完整点了解JVM知识的也可以阅读本书,书写的不错,相当通俗易懂. 第一部分 内存管理机制: Java内存区域与内存溢出: Java内存区域分为堆.栈(Java虚拟机栈和本地方法栈,不过对于hotspot来讲,是一致的).方法区.程序计数器.直接内存区域(NIO的allocateByDireactMemory)等.借用@兰亭风雨 的图片一张 其中方法区用于加载类信息.常量.静态变量.即时编译器编译

JVM菜鸟进阶高手之路十(基础知识开场白)

转载请注明原创出处,谢谢! 最近没有什么实战,准备把JVM知识梳理一遍,先以开发人员的交流来谈谈jvm这块的知识以及重要性,依稀记得2.3年前用solr的时候老是经常oom,提到oom大家应该都不陌生,那个时候也并没有从根本解决oom,由于对jvm不熟悉,只是去百度,到处都是配置jvm参数的,那个时 http://pic.cnhubei.com/space.php?uid=1993&do=album&id=1086558http://pic.cnhubei.com/space.php?ui