java内存模型(线程共享部分)
1、元空间(MetaSpace)与永久代(PermGen)的区别?
----》
1.1 元空间使用的是本机内存(这样的好处是,可以使用的内存空间变大了,没有OutOfMemoryError:PermGen space异常) ,永久代使用的是jvm内存!!!!核心!!!!
1.2 没有了字符串常量池(在jdk7中已经被移动到堆中),
1.3 存储的东西包括:类文件,在jvm运行时的数据结构,以及class的相关内容(如 method \ field)大体上都喝永久代一样,但是划分上更加合理了(比如类以及相关的元数据的生命周期与类加载器一致,每个加载器都会分配一个存储空间,可以单独更深入去了解)。
而永久代是用jvm内存
在jdk8中,metaspace替代了permgen
问MetaSpace相比PermGen的优势是什么?
1、字符串常量池存在永久代中,容易出现性能问题和内存不足
2、类和方法的信息大小难易确定,给永久代的大小制定带来问题
3、永久代会为GC带来不必要的复杂性(GC需要特殊处理永久代中数据)
4、方便HotSpo与其他JVM如Jrockit的集成
java堆(Heap)
说明,在虚拟机启动的时候创建,也是虚拟机中占内存最大的一块,唯一目的是保存对象实例
1、对象实例的分配区域
2、GC管理的主要区域
问题:JVM 三大性能调优参数 -Xms -Xmx -Xss的含义?
---》java -Xms 128m -Xmx128m -Xss256k -jar xxx.jar
-Xss 规定每个线程的虚拟机栈的内存大小(影响并发线程数的大小)
-Xms : 堆的初始值(一旦对象超过这个值,会自动扩容,扩展到Xmx值)
-Xmx: 堆能达到的最大值(一般将Xms和Xmx设置的值都是一样的,为了防止发生扩容时会发生内存抖动)
问题:请问Java内存模型中堆和栈的区别-----内存分配策略
----》
管理方式:栈不需要GC回收,堆需要GC
空间大小:栈的内存空间比堆的内存空间小
碎片相关:栈产生的碎片远少于堆
分配方式:栈支持静态和动态存储。而堆只支持动态存储
效率:栈比堆的执行效率高(内存块的结构本来就是栈的结构,堆的结构是双向链表,灵活度高,但是效率低)
额外知识:
内存的分配策略:
静态存储:编译时就计算出每个数据在运行时所需要的存储空间大小
栈式存储:数据区需求在编译时未知,只在运行时模块入口前确定
堆式存储:编译时或运行时模块入口都无法确定,动态分配
联系:栈保存时对象的引用,堆保存对象的实例(引用对象、数组时,栈里定义变量保存堆中目标的首地址)
可以看看下图,简单的程序,对应着元空间,堆,线程独占的联系:
问题:请解析一下不同JDK版本之间的intern()方法的区别----JDK6 VS JDK6+ ?
----》https://www.cnblogs.com/Kidezyq/p/8040338.html
java内存模型(线程共享部分)的更多相关文章
- 3.java内存模型以及happens-before规则
1. JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有这么简单,那我们就不必费劲周折的去学习它了.在多线程中稍微不注意就会出现线程安全 ...
- Java内存模型以及happens-before规则
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 从原子类和Unsafe来理解Java内存模型,AtomicInteger的incrementAndGet方法源码介绍,valueOffset偏移量的理解
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性和变量可见性,用volatile保持值的可见性和操作顺序性: 从一个小例子引发的 ...
- java线程内存模型,线程、工作内存、主内存
转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...
- Java 线程 — JMM Java内存模型
JMM Java Memory Model,Java内存模型,属于语言级的内存模型 并发编程中存在的问题: 如何通信:用于线程之间交换信息.两种方式:共享内存,消息传递 如何同步:用于控制不同线程间操 ...
- java内存模型与线程(转) good
java内存模型与线程 参考 http://baike.baidu.com/view/8657411.htm http://developer.51cto.com/art/201309/410971_ ...
- JAVA内存模型与线程
概述 由于计算机的运算速度和它的存储和通讯子系统的速度差距巨大,大部分时间都花在IO,网络和数据库上.为了压榨CPU的运算能力,需要并发.另外,优秀的并发程序对于提高服务器的TPS有重要的意义. 硬件 ...
- 【Java线程】Java内存模型总结
学习资料:http://www.infoq.com/cn/articles/Java-memory-model-1 Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态, ...
- Java内存模型与Java线程实现原理
硬件的效率与一致性 基于高速缓存的存储交互很好的解决了处理器和内存的速度矛盾,但是也为计算机系统带来了更高的复杂度,因为引入了一个新问题:缓存一致性. 在多处理器系统中,每个处理器都有自己的高速缓存, ...
随机推荐
- centos安装xen虚拟机并且配置bridge
主要参考的几个官方文档: http://wiki.centos.org/HowTos/Xen/Xen4QuickStart 在centos上安装xen组件并建立dom0 http://wiki.cen ...
- notepad++的NppFTP插件远程连接linux操作系统
1.首先要有NppFTP插件,如果没有可以去下面链接或者其他网站下载: https://sourceforge.net/projects/nppftp/files/latest/download ...
- hibernate的基础学习--一对一关联
一对一关系以丈夫和妻子模型 配置文件 妻子配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DO ...
- 862. Shortest Subarray with Sum at Least K
Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K. If there ...
- 2016 Multi-University Training Contest 3 1011【鸽巢原理】
题解: 坐标(0,m)的话,闭区间,可能一共有多少曼哈顿距离? 2m 但是给一个n,可能存在n(n+1)/2个曼哈顿距离 所以可以用抽屉原理了 当n比抽屉的数量大,直接输出yes 不用计算 那...N ...
- hihoCoder搜索二·骑士问题
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> ...
- 基于FBX SDK的FBX模型解析与加载 -(三)
http://blog.csdn.net/bugrunner/article/details/7229416 6. 加载Camera和Light 在FBX模型中除了几何数据外较为常用的信息可能就是Ca ...
- (3)javascript的数据类型
本篇学习资料主要讲解javascript中的数据类型 Javascript的数据类型 Javascript的数据类型:即一个数据不必首先做声明,可以在使用或赋值时再确定其数据的类型,当然也可以先声明该 ...
- try/except/finally
Python也不例外,跟其他高级语言一样,内置了一套try...except...finally...的错误处理机制 当认为某些代码可能会出错时,就可以用try来运行这段代码 使用try时,要么exc ...
- 组合数+容斥原理 UVALive 7040 Color(14西安F)
题目传送门 题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色 分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超 ...