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线程实现原理
硬件的效率与一致性 基于高速缓存的存储交互很好的解决了处理器和内存的速度矛盾,但是也为计算机系统带来了更高的复杂度,因为引入了一个新问题:缓存一致性. 在多处理器系统中,每个处理器都有自己的高速缓存, ...
随机推荐
- 洛谷 - P1433 - 吃奶酪 - dfs
https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...
- 洛谷 - P1355 - 神秘大三角 - 简单计算几何
https://www.luogu.org/problemnew/show/P1355 判断一个点和三角形的位置关系,最简单的思路就是用向量. 首先排除掉和三角形顶点重合的情况. 把三角形设计成一个首 ...
- 浅谈单调栈 By cellur925
这位dalao的单调栈文章很棒!我写的是他的题单233. http://www.cnblogs.com/COLIN-LIGHTNING/p/8474668.html 一.单调栈的一般写法 ;i< ...
- SpringBoot的配置文件加载顺序以及如何获取jar包里的资源路径
一.读取配置文件的四种方式 这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档. 1.1jar包同级目录下的config文件夹里的配置文件 其实我以前就见过这种方式了,只是不知道怎么做的 ...
- Centos6.8 配置 Tomcat
1.安装Tomcat,安装之前必须先安装Java,先安装java 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index. ...
- OLE/COM Object Viewer
OLE/COM Object Viewer摘AutoIt Help The "OLE/COM Object Viewer" is a very handy tool to get ...
- win操作系统段和分页机制
- $.ajax从后台取数据 然后做字符串拼接的例子
- nginx缓存过期
1 原理 在默认下,请求过的内容会接受304,而从本地缓存调用.这是通过client向server发送请求,给出ETag,server确认ETag未变,则不返回内容,client调用本地缓存. 而ex ...
- (027)[技术资料]业余制作Windows图标
这几天一直在纠结一件事,想给软件制作一个简单的图标,以前(2014-10-4 11:00)制作的是下面这个,多重ICO,最大尺寸256,无压缩(windows允许图标尺寸在大于256时按PNG方式进行 ...