首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM 学习笔记(二)

四:堆指向方法区   方法区中会包含类的信息,堆中会有对象,那怎么知道对象是哪个类创建的呢? ?   一个对象怎么知道它是由哪个类创建出来的?怎么记录?这就需要了解一个Java对象的具体信息了。...在同一个时间点上,S0和S1只能有一个区有数据,另外一个是空的。   接着上面的GC来说,比如一开始只有Eden区和From中有对象,To中是空的。...也就是说无论如何都要保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程,知道To区被填满,然后会将所有对象复制到老年代中。...六:从对象角度理解对象在堆中的一生   我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。...假设现在只有一个Survivor区,我们来模拟一下流程: 刚刚新建的对象在Eden中,一旦Eden满了,触发一次Minor GC,Eden中的存活对象就会被移动到Survivor区。

36810

leetcode 494. 目标和

nums[i]这个元素我可以执行加,还可以执行减,那么我dp[i][j]的结果值就是加/减之后对应位置的和。...结果是肯定的,因为刚刚就是把nums分成了left组合和right组合,那加起来肯定是sum啊,接下来就要展示得到的结论了,接好了啊,来咧!!!...当思路转换后,就变成了01背包问题,为什么是01背包呢? 因为每个物品(题目中的1)只用一次! 这次和之前遇到的背包问题不一样了,之前都是求容量为j的背包,最多能装多少。 本题则是装满有几种方法。...2.确定递推公式 有哪些来源可以推出dp[j]呢? 不考虑nums[i]的情况下,填满容量为j - nums[i]的背包,有dp[j - nums[i]]中方法。...从递归公式可以看出,在初始化的时候dp[0] 一定要初始化为1,因为dp[0]是在公式中一切递推结果的起源,如果dp[0]是0的话,递归结果将都是0。

35710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    对GC的理解

    在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区,Survivor区“To”是空的。...Minor GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有对象移动到年老代中。 ?...三、一个对象的这一辈子 我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。...假设现在只有一个survivor区,我们来模拟一下流程: 刚刚新建的对象在Eden中,一旦Eden满了,触发一次Minor GC,Eden中的存活对象就会被移动到Survivor区。...上述机制最大的好处就是,整个过程中,永远有一个survivor space是空的,另一个非空的survivor space无碎片。 那么,Survivor为什么不分更多块呢?

    1.1K40

    老公:怎么排查堆内存溢出啊?

    cpu100%排查文章 在排查之前,我想jvm的基础知识大家应该都是了解了的吧? 老婆我就是不了解,人家要你说给我听。...Minor GC同样会检查存活下来的对象,并把它们转移到另一个survivor区。这样在一段时间内,总会有一个空的survivor区。...然后就是GC到一定的阈值到老年代,今天不讲永久代所以忽略Mataspace。 老婆:那怎么分析呢?...一般什么情况可能是出现了溢出呢? 超时,不进行服务,服务挂掉,接口不在服务这样的异常问题。 那模拟也很简单,我写个循环一直往List丢数据,不使用list就能看到现象了 ?...延伸点 上面我们使用工具jump了,那怎么去服务器上jump呢?

    1.1K20

    【C++】算法集锦(9):背包问题

    2、明确dp数组 刚刚说到有两个状态,所以我们选用一个二维数组:dp[i][w]:对于前 i 个物体,在背包容量为w的时候,可以装的最大价值是dp[i][w]。...什么情况下不选呢? 那当然是哪个有利就选哪个嘛。 所以,伪代码怎么写?...这个问题怎么转化为背包为题呢? 首先,对这个数组计数,如果和是奇数,就返回-1吧,如果和是偶数,就除于二,记为n。 这个问题就转变为:从数组中找出一些数,使得它们的和恰好等于n。...---- 其实看了这个题目,最直接的想法就是逆序排序之后用回溯 思路分析 状态和选择已经很明确了吧。...是吧,是回溯吧,这个我画的决策树可能是丑了点(我看得出来),将就着理解一下吧。

    67110

    深度学习caffe的代码怎么读?

    2.单步调试,跟着Caffe在网络里流动 当玩了几天之后,你对Caffe的接口有点熟悉了,对已有的例子也玩腻了,你开始想看看具体是怎么实现的了。...我建议你先去看看Caffe如何实现卷积的,Caffe作者贾扬清大牛在知乎上的回答在 Caffe 中如何计算卷积?让我茅塞顿开。重点理解im2col和col2im....我建议你死磕Caffe中Convolution层的计算过程,把每一步都搞清楚,经过痛苦的过程之后你会对反向传播有了新的体会的。在这之后,你应该有能力添加自己的层了。...其实关于怎么用caffe,我一直想写篇文章,因为给太多人讲过怎么用了,也帮很多人基于caffe写过代码。14年初因为赶NIPS,开始用caffe,大概用了有一年半了。...,不管是在代码架构方面,还是在实现细节方面,caffe都有很多值得借鉴的地方,相信大家在阅读完caffe之后也一定会受益匪浅~~~ 作为一个caffe的初学者,感觉上边几位高票的答案已经写的非常的好了。

    1.6K10

    动态规划:目标和!

    提示: 数组非空,且长度不会超过 20 。 初始的数组的和不会超过 1000 。 保证返回的最终结果能被 32 位整数存下。...我也把代码给出来吧,大家可以了解一下,回溯的解法,以下是本题转变为组合总和问题的回溯法代码: class Solution { private: vectorvector> result...再回归到01背包问题,为什么是01背包呢? 因为每个物品(题目中的1)只用一次! 这次和之前遇到的背包问题不一样了,之前都是求容量为j的背包,最多能装多少。 本题则是装满有几种方法。...下面我都是统一使用一维数组进行讲解, 二维降为一维(滚动数组),其实就是上一层拷贝下来,这个我在动态规划:关于01背包问题,你该了解这些!(滚动数组)也有介绍。...确定递推公式 有哪些来源可以推出dp[j]呢? 不考虑nums[i]的情况下,填满容量为j - nums[i]的背包,有dp[j - nums[i]]中方法。

    59620

    【已解决】python安装pytorch时出现torch.cuda.is_available() = False的问题(图文教程)

    一、Bug描述 在我刚刚发的【2024保姆级图文教程】深度学习GPU环境搭建:Win11+CUDA 11.7+Pytorch1.12.1+Anaconda 深度学习环境配置 文章中(跳转链接:保姆级教程深度学习环境...) 在最后一步的时候出现了torch.cuda.is_available() = False的问题 截图如下: 当时快给我搞炸了,好不容易到最后一步了,那能怎么办,只能排查问题了。...7、系统权限问题:在某些情况下,权限问题可能会导致 CUDA 设备无法被访问。 8、CUDA 版本与 GPU 不兼容:安装的 CUDA 版本可能与你的 GPU 不兼容。...然后安装好之后,再输入代码torch.cuda.is_available() 再看看问题是否解决了。 方案二: Pytroch和CUDA版本不对应 很多同学,一定是没有对应好版本!...我感觉大部分人是这个问题,大家一定要仔细对照可用版本! 这里洲洲给大家放了对应版本截图。 ok,找到对应版本之后,还是刚刚那个地址,去下载。

    5.6K11

    CV环境很重要!!各种环境搭建大全

    记得,上周有几个小伙伴问我们可不可以照顾下新手,刚刚入门的同学,其实,我们之前很多推送都是为你们准备的,如果想认真学习的你,我建议可以回头去阅读下我们的历史消息。...因为之前我用的笔记本(华硕)配置不是很高,而且没有独立显卡,现在我也不怎么推荐使用华硕的笔记本(个人观点,如果不满意那也没办法哈哈!)。...(跟着这个步骤走就不会有问题,至于那个空间大小选择,那根据自己情况设置,如有不懂可以看他人怎么设置的,请点击看他人怎么设置的!)...在桌面按“Ctrl+Alt+t”就可以进入命令界面,在终端输入以下命令: 对了,那个CUDA7.5下载地址:https://developer.nvidia.com/cuda-downloads 其安装过程需要连接网络...然后在终端输: export CUDA_HOME=/usr/local/cuda-7.5 export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 PATH=${CUDA_HOME

    55830

    Java容器篇小结之List自问自答

    什么是List 看到这个有点懵逼,一时还真不知道怎么解释,能让完全没有接触过的人都能听懂 列表,什么是列表呢?...,我就告诉你他家门牌号,然后就有这么个问题了 张三家的门牌是张村五号 后面张五家生了个小孩,也取名叫张三,然后张三自立门户了,门牌分的是张村105号 现在我问张三家门牌是多少?...是五号呢还是105呢?这个就不唯一了 换成链表的方式,你报一个门牌号,要么这门牌号无效,要么就只有一家在哪儿等着你呢,这就是我所说的唯一性 (废话比较多,可惜没有稿费) ---- 1....,此时需要将数组扩容,优先扩容原来容量的1.5倍(若依旧不够,则扩容到恰好能容纳所有元素) add(index, obj), 在索引处添加数据,会导致原数组中,索引之后的数据后移(即会出现数组拷贝) 删除末尾数据...,已经退出历史舞台了 Vector 线程安全的列表,其实现是在所有的方法上加了同步锁,确保同一时刻,只有一个线程在访问列表,是一种伪并发的使用方式 CopyOnWriteArrayList 写副本,替换原链表的方式实现线程安全

    60880

    史上最成功安装Pytorch快速方法【亲测绝对有效,很好用很好用】

    弄完上述之后,就可以安装pytorch gpu版本了,是不是很激动,稍等,对了这个gpu你的电脑支不支持还得看你英伟达的显卡,我的是gtx1660ti是没问题,一般的gpu都支持,至于安装的是cuda什么版本的还真的要去看你的英伟达显卡的型号了...,怎么查看自己的英伟达显卡信息呢?...尽量选择stable稳定版本,我选择的是上面的windows版本,conda安装,Python语言,CUDA版本是10.2 然后复制 run this command 上面的网址: conda install...整个过程不超过五分钟,原来直接安装,失败就算了,还次次都失败,气 4、测试安装 在刚刚创建的pytorch环境命令行中输入python 进入python 测试》》》》》》 import torch 如果没有报错说明安装成功...5、在Pytorch中安装jupyetr notebook jupyter 是一个交互特别好的界面,适合初学者学代码,怎么安装呢?

    29.4K75

    【动态规划】第 N 个泰波那契数

    然后把这个表给填满,其中的一个值就有可能是我们想要的结果。 状态表示就是dp表中的某一个值所表示的含义 状态表示是怎么来的呢?得到状态表示的途径无非有以下几种:①题目要求。②经验+题目要求。...所以本题的状态表示为:dp[i]表示第i个泰波那锲数 第二步:状态转移方程 dp[i]等于什么?这就是状态转移方程。 在本题中:dp【i】=dp【i-1】+dp【i-2】+dp【i-3】。...这个就是状态转移方程,而得到状态转移方程的途径就是题目描述。 所以,这一步也是装备转移方程最难的一步。 接下来的几步都是在处理细节的问题。...第三步:初始化 要求就是:保证填表的时候不越界 怎么填表?根据状态转移方程填表。然后在两端的位置进行分析。 第四步:填表顺序 要求就是:为了保证填写当前位置的时候,所需的位置已经填写过了。...public: int tribonacci(int n) { if(n==0) return 0; if(n==1||n==2)return 1; vector

    9810

    CV环境很重要!!各种环境搭建大全

    记得,上周有几个小伙伴问我们可不可以照顾下新手,刚刚入门的同学,其实,我们之前很多推送都是为你们准备的,如果想认真学习的你,我建议可以回头去阅读下我们的历史消息。...因为之前我用的笔记本(华硕)配置不是很高,而且没有独立显卡,现在我也不怎么推荐使用华硕的笔记本(个人观点,如果不满意那也没办法哈哈!)。...(跟着这个步骤走就不会有问题,至于那个空间大小选择,那根据自己情况设置,如有不懂可以看他人怎么设置的,请点击看他人怎么设置的!)...在桌面按“Ctrl+Alt+t”就可以进入命令界面,在终端输入以下命令: 对了,那个CUDA7.5下载地址:https://developer.nvidia.com/cuda-downloads 其安装过程需要连接网络...然后在终端输: export CUDA_HOME=/usr/local/cuda-7.5 export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 PATH=${CUDA_HOME

    56030

    【C++】STL——vector 深度剖析 及 模拟实现

    1.2.3 vector的迭代器 那vector的迭代器呢我们看到其实还是这几个: 跟string的一样,那在之前文章里我们也对这几个迭代器进行了介绍,所以这里我就不再过多解释了。...那这样的话呢: 也就是说它的三个成员变量其实就是三个指针,那它们三个是什么功能呢?我们怎么去源码中去探索呢? ,那我们可以先去考虑看一下构造,在构造函数里是怎么对它们初始化的。...解决方式: 在以上操作完成之后,如果想要继续通过迭代器操作vector中的元素,可以更新it。 insert 首先我们先来实现一下insert: 怎么实现?...,我们接着看: 迭代器区间的这个构造函数我们写好之后呢,会发现一个问题: 我们编译会发现报错了,说非法的间接寻址。 哎?怎么回事啊?...但是呢: 上面这种写法不够传统,本质是在复用,接下来我们再实现一个更传统一点的,方便我们讲解后面的东西: 大家思考一下,如果不复用push_back的话,开好空间之后我们可以怎么拷贝?

    25111

    Python环境配置保姆教程(Anaconda、Jupyter、GPU环境)!

    Linux,Linux是在哪个目录下启动,就会默认哪个目录为工作空间,但是Windows中不是这样,那么怎么修改默认工作空间呢?...结束之后, 怎么看是否成功了呢?打开下面这个路径,查看nvcc.exe,有这个说明CuDA安装成功。...下载下来之后,解压cuDNN: 将解压后文件复制到CUDA文件夹下 接下来,要配置环境变量, 我的电脑——>属性——>高级系统设置——>环境变量 在系统环境变量中找到path 当安装完Cuda...此时,我再想一个问题,我在虚拟环境里面输入python,然后import tensorflow的时候,此时tensorflow去找依赖的时候,是去哪里找呢?...怎么保证它这里是找的环境变量里面的配置呢?

    3.1K20

    请求数据包从发送到接收,都经历什么?

    其实不仅仅是建立连接时的三次握手,像浏览器中调用的很多 HTTP 接口,都会和服务器进行通信。 那这些个请求到底都是怎么发送给服务器的呢? 这还用问?不就是发个 HTTP 请求就过去了吗?...那协议栈收到了这一堆二进制序列之后是不是就直接交给网卡发送了呢? 我都这么问了,那显然不是了... 其实协议栈在收到数据之后并不会马上就会就发送出去,而是会先写入位于内存的 Buffer 中。...这明显不行的。 那怎么避免上面的这个情况呢?答案很简单,稍微延长一点 ACK等待时间,这样一来就能一定程度上避免上述的问题。...因为刚刚说过,应用程序发送的时候,会将发送过的数据存储在 buffer 中。...但是如果发送的数据太快,超过了重组的速度,缓冲区就会被填满。而缓冲区一旦被填满,后续的数据就无法再接收了,然后丢包就出现了。 那 TCP 是如何解决这个问题的呢?答案是 流量控制。

    83320

    请求数据包从发送到接收,都经历什么?

    其实不仅仅是建立连接时的三次握手,像浏览器中调用的很多 HTTP 接口,都会和服务器进行通信。 那这些个请求到底都是怎么发送给服务器的呢? 这还用问?不就是发个 HTTP 请求就过去了吗?...那协议栈收到了这一堆二进制序列之后是不是就直接交给网卡发送了呢? 我都这么问了,那显然不是了... 其实协议栈在收到数据之后并不会马上就会就发送出去,而是会先写入位于内存的 Buffer 中。...这明显不行的。 那怎么避免上面的这个情况呢?答案很简单,稍微延长一点 ACK等待时间,这样一来就能一定程度上避免上述的问题。...因为刚刚说过,应用程序发送的时候,会将发送过的数据存储在 buffer 中。...但是如果发送的数据太快,超过了重组的速度,缓冲区就会被填满。而缓冲区一旦被填满,后续的数据就无法再接收了,然后丢包就出现了。 那 TCP 是如何解决这个问题的呢?答案是 流量控制。

    85420

    【二叉树进阶】二叉树的前中后序遍历(非递归迭代实现)

    那我们这里还是,每一棵树都把它分成左路结点和右子树 回忆一下上一题我们的前序是怎么走的:、 我们是在左路结点入栈的时候就把它放到要返回的vector里面,因为这就符合前序遍历的顺序。...那如果我们实现一个根、右子树、左子树的遍历,然后把得到的vector逆置一下是不是就是后序遍历的结果啊。 那怎么能够得到一个根、右子树、左子树的遍历呢?...,我们把前序遍历的代码修改一下,访问完根之后先访问右子树、在访问左子树不就行了嘛。...但是我们后序就不能直接这样了,因为后序要在右子树访问完之后再去访问根 那怎么办? 其实很简单,加一个判断就行了。...能不能直接pop,然后放到vector里面,其实要看情况: 大家看对于1这种情况我们可不可以直接访问,是不是可以啊,因为1的右子树为空。 那如果是6这种情况呢?

    21410

    JVM真香系列:堆内存详解

    在同一个时间点上,S0和S1只能有一个区有数据,另外一个是空的。 接着上面的GC来说,比如一开始只有Eden区和From中有对象,To中是空的。...也就是说无论如何都要保证名为To的Survivor区域是空的。 Minor GC会一直重复这样的过程,知道To区被填满,然后会将所有对象复制到老年代中。 ? ? Old区概览 ?...对象1 我是一个普通的Java对象,我出生在Eden区,在Eden区我还看到和我长的很像的小兄弟,我们在Eden区中玩了挺长时间。...有一天Eden区中的人实在是太多了,我就被迫去了Survivor区的“From”区,自从去了Survivor区,我就开始漂了,有时候在Survivor的“From”区,有时候在Survivor的“To”...假设现在只有一个Survivor区,我们来模拟一下流程: 刚刚新建的对象在Eden中,一旦Eden满了,触发一次Minor GC,Eden中的存活对象就会被移动到Survivor区。

    52720
    领券