JDK1.6、JDK1.7、JDK1.8 内存模型对比

Python035

JDK1.6、JDK1.7、JDK1.8 内存模型对比,第1张

如图25-1 是 JDK 1.6、1.7、1.8 的内存模型演变过程,其实这个内存模型就是 JVM 运行时数据区依照JVM虚拟机规范的具体实现过程。

JDK 1.6:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区[永久代](字符串常量池、静态变量、运行时常量池、类常量池)

JDK 1.7:程序计数器、Java虚拟机栈、本地方法栈、堆(字符串常量、静态变量)、方法区[永久代](运行时常量池、类常量池)

JDK 1.8:程序计数器、Java虚拟机栈、本地方法栈、堆(字符串常量)、元数据(静态变量、运行时常量池、类常量池)

JDK 1.8 JVM 的内存结构主要由三大块组成:堆内存、元空间和栈,Java 堆是内存空间占据最大的一块区域。

Java 堆,由年轻代和年老代组成,分别占据1/3和2/3。

年轻代又分为三部分, Eden 、 From Survivor 、 To Survivor ,占据比例为8:1:1,可调。

元空间从虚拟机Java堆中转移到本地内存,默认情况下,元空间的大小仅受本地内存的限制,说白了也就是以后不会因为永久代空间不够而抛出OOM异常出现了。 jdk1.8以前版本的 class和JAR包数据存储在 PermGen下面 ,PermGen 大小是固定的,而且项目之间无法共用,公有的 class,所以比较容易出现OOM异常。

升级JDK 1.8后,元空间配置参数,-XX:MetaspaceSize=512M XX:MaxMetaspaceSize=1024M。

小技巧通过jps、jinfo查看元空间,如下:

通过jinfo查看默认MetaspaceSize大小(约20M),MaxMetaspaceSize比较大。

其他:关于JDK1.8 元空间的介绍:  Move part of the contents of the permanent generation in Hotspot to the Java heap and the remainder to native memory. http://openjdk.java.net/jeps/122

java内存区域主要分程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、直接内存。其中程序计数器、Java虚拟机栈、本地方法栈属于线程隔离,即他们都有自己的线程归属,其他属于线程共享的。

1、程序计数器。这个是当前线程正在执行的字节码行号指示器。根据这里面的内存数据来确定程序接下来执行的指令。每个线程都有一个,相互隔离,线程切换回来时才知道怎么执行。如果执行的是方法,这里记录的是虚拟机字节码指令的地址。当执行的是Native方法的时候为空(Undefined)。

2、Java虚拟机栈。每个线程私有,里面装的多个栈帧,每个栈帧对于的一个方法。里面存储的是Java方法的内存模型。相当于描述的是一个方法需要的内容。

3、本地方法栈。线程私有,和上一个Java虚拟机栈作用相似,Java虚拟机栈是为Java方法服务,本地方法栈是为Native服务。

4、Java虚拟机管理最大的一块,线程共享,存放对象实例和数组。分新生代(1/3)和老年代(2/3),新生代还可以分Eden(8/10)、FromSurvivor(1/10)、ToSurvivor(1/10),是主要根据垃圾清理来分的。

5、方法区。线程共享,主要存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码。运行时常量池也是方法区的一部分,比如String有一个常量池,他就是放到这个里面的。

6、直接内存。NIO通过使用Native函数库直接分配对外内存。

《实战Java高并发程序设计》是一本由葛一鸣 / 郭超著作,电子工业出版社出版的平装图书,本书定价:69.00元,页数:352,文章吧我精心整理的一些读者的读后感,希望对大家能有帮助。

《实战Java高并发程序设计》读后感(一):是本入门书籍

这是一本Java并发基础以及conCurrent包的类的简介,虽然书名是实战,但是例子挺多都是属于helloWorld级别的,所以是比较适合入门。同时也会夹着一些对源码和数据机构的分析,也会有Java8带来一些新特性(比如函数式编程等)的讲解,所以还可以吧。

还有一点就是这本书的图会比较新颖和奇葩,例如下面这样的:

有时候会觉得挺形象的,更多的时候是不想吐槽(有些字一下子还看不出来是什么字o(╯□╰)o),还是希望用专业的画图软件画吧.

再去找一个并发的书籍看看加强~并发真的需要好好学学

《实战Java高并发程序设计》读后感(二):全面了解Java并发编程的好书

1.这本书的章节编排是比较清晰的,而且是由浅入深、由理论到实战,阅读的时候感觉特别流畅;

2.如果你翻过这本书,你一定会对书中的插图印象“深刻”,很难想象现代出版的书里的插图是这种质量;

3.关于Java并发的知识可以说是介绍得比较全面了,当前全面的话可能就没法真正的深入,比如ConcurrentHashMap基本上并发编程中最常用最经典的设计,但是书上介绍的非常少;同样的,Java 8中引入的CompletableFuture也是一个很重要的工具但是介绍的篇幅也非常有限;

4.对于Akka这一块,说实话我读了两遍,还是没有看得很懂,通过阅读官方的文档才比较清晰,感觉这一块写得有点混乱,条理不够清晰;

5.最终我还是给这本书四星,因为读后自己确实对并发这一块有了比较完整的认识,读后结合《深入理解Java虚拟机(第2版)》,从项目中的代码找到并相关部分并予以改进,梳理并发重点的知识(显式锁控制、并发容器、并发流),收获还是挺多的。

《实战Java高并发程序设计》读后感(三):Java并发编程和高并发解决方案视频课程

Java并发编程和高并发解决方案视频课程

网盘地址://pan.baidu/s/19tUBliZIYy2HQ0LiVfCw-A 密码: d9fb

备用地址(腾讯微云)://share.weiyun/5grRNnM 密码:e324w9

学会高并发处理思路与手段,让跳槽面试从容不迫,并发与高并发是面试的重要考察点,常问面试问题与答案都在这里了!

无论面试还是实际开发,几乎都会涉及并发相关知识及高并发相关场景处理,如果你想系统的学习一下并发编程

并了解一下实际的高并发场景及应对方案,那这门课就是为你准备的。

第1章 课程准备

第2章 并发基础

第3章 项目准备

第4章 线程安全性

第5章 安全发布对象

第6章 线程安全策略

第7章 J.U.C之AQS

第8章 J.U.C组件拓展

第9章 线程调度-线程池

第10章 多线程并发拓展

第11章 高并发之扩容思路

第12章 高并发之缓存思路

第13章 高并发之消息队列思路

第14章 高并发之应用拆分思路

第15章 高并发之应用限流思路

第16章 高并发之服务降级与服务熔断思路

第17章 高并发之数据库切库分库分表思路

第18章 高并发之高可用手段介绍

第19章 课程总结

《实战Java高并发程序设计》读后感(四):实战Java高并发程序设计书评

说实话,在当当上找了很多有关java并发编程的书籍,最后也不知道是什么原因买了这本书(好像是这本书有优惠。。。)买来之后看了,简直后悔得不行!

这本书的作者是葛一鸣和郭超,出版社是电子工业出版社!

首先,这本书的作者的写作态度值得怀疑,书中的配图完全是手画的,而且画的质量实在不敢恭维,写过的论文都应该知道,画图应该用Visio。实在纳闷那么多专业的图,作者为何不用Visio或其他专业画图软件,选择用手画是几个意思,关键画的质量还不咋地,歪七八糟的,看都看不清楚!作为一个专业的出版社,编辑也能审核通过,我是佩服出版社的编辑的审稿能力!

其次,关于java并发这块,这本书连入门书籍都算不上,只能算是科普下,书中涉及到的并发知识,比如java内存模型,volatile,锁等,作者都没有深入原理的讲,基本上都是简单带过,远不如百度来的讲得好,其中讲volatile的一段:“和原子性问题一样,我们只要简单地使用volatile来声明ready变量,告诉java虚拟机,这个变量可能会在不同的线程中修改,这样就可以顺利的解决这个问题了。” 不知道大家觉得怎么样,反正我看完想说脏话,作者你就是这么讲解技术的吗?用volatile来告诉虚拟机变量会在不同线程中修改??我只能说呵呵

还有一点,其他豆瓣网友也提到过,很多内容以及代码都是从其他博客、文章copy过来,作者原创的有价值的东西,几乎为零。

书中还有其他一些低级错误,就不一一指出了,最后,如果有幸能够被作者看到此评论,真心希望作者好好反思下,请你为写出的书负责,确保产出原创的有意义的内容,不是随意copy几段文字和代码,整理下就能出书的,请你对得起买书的读者!