Showing posts with label Hemant kurmi. Show all posts
Showing posts with label Hemant kurmi. Show all posts

Sunday, 9 April 2023

Hemant Kurmi - 2021 - Some Amazing Facts About Memory: Petabyte, Exabyte, and Zettabyte

Some Amazing Facts About Memory: Petabyte, Exabyte, and Zettabyte

As technology advances, our ability to store and process data has grown exponentially. From kilobytes to gigabytes and terabytes, we have witnessed a massive increase in storage capacities. In this blog post, we will explore some amazing facts about the larger units of digital storage: petabytes, exabytes, and zettabytes.

Petabyte: A Massive Data Repository

A petabyte (PB) is an incredible amount of digital storage, equal to 1,000 terabytes (TB) or 1,000,000 gigabytes (GB). To put this in perspective, consider the following:

  • If you were to store text documents in petabyte-sized storage, you could store around 500 billion pages of text.
  • A petabyte can hold approximately 333,333 hours of high-definition video or over 13,000 years of standard-quality music.
  • It is estimated that all the written works of humanity, in every language, would amount to around 50 petabytes.

Exabyte: A Mind-Boggling Amount of Data

An exabyte (EB) is equal to 1,000 petabytes or 1,000,000 terabytes. The scale of an exabyte is genuinely mind-boggling. Some interesting facts about exabytes include:

  • In 2019, it was estimated that the global internet traffic per month was around 150 exabytes.
  • If you were to fill a stack of 1-terabyte hard drives, the stack would be about 67,108 miles (107,954 km) high to store an exabyte of data. That's more than a quarter of the way to the Moon!
  • It would take over 36,000 years to download an exabyte of data with a 100 Mbps internet connection.

Zettabyte: A Glimpse Into the Future of Data Storage

A zettabyte (ZB) is equal to 1,000 exabytes, or 1,000,000 petabytes. The sheer size of a zettabyte is difficult to comprehend, but here are some amazing facts to help illustrate the magnitude:

  • As of 2021, the entire World Wide Web was estimated to contain around 2.5 zettabytes of data.
  • By 2025, it is projected that the global data sphere will reach 175 zettabytes. This would mean that if every person on Earth were given a 128 GB smartphone, the total amount of data stored on those smartphones would be less than 1 zettabyte.
  • If you were to store a zettabyte of data on DVDs, the stack of DVDs would be about 4,982,525 miles (8,017,877 km) high, which is more than 10 times the distance between Earth and the Moon.

Conclusion

The exponential growth of data storage capacities, as demonstrated by petabytes, exabytes, and zettabytes, is a testament to the rapid advancements in technology. These mind-boggling storage units offer us a glimpse into the future of data storage and processing. As we continue to generate, analyze, and share more data, it's crucial to develop innovative solutions and

Friday, 5 August 2022

Hemant Kurmi - Diffrence Between Abstract class Interface

Difference Between
Sno
Abstract class
Interface
1 1) Abstract class can have abstract and non-abstract methods. Interface can have only abstract methods.
2 2) Abstract class doesn't support multiple inheritance. Interface supports multiple inheritance.
3 3) Abstract class can have final, non-final, static and non-static variables. Interface has only static and final variables.
4 4) Abstract class can have static methods, main method and constructor. Interface can't have static methods, main method or constructor.
5 5) Abstract class can provide the implementation of interface. Interface can't provide the implementation of abstract class.
6 6) The abstract keyword is used to declare abstract class. The interface keyword is used to declare interface.

#kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi #hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi

Saturday, 12 September 2015

[Hemant Kurmi] - Encapsulation in Practical.

Encapsulation is one of the four fundamental OOP concepts. It is a technique used to protect a program's internal characteristics and behavior by creating private fields within a class and providing access to them through public methods. When a field is declared private, it cannot be accessed by anyone outside the class, effectively hiding the fields within the class. Encapsulation thus protects the code and data from unauthorized access by creating a protective wrapper around them.

Encapsulation can be described as a protective barrier that prevents code and data from being randomly accessed by other code defined outside the class. The main benefit of encapsulation is the ability to modify implemented code without breaking the code of others who use it. This feature provides maintainability, flexibility, and extensibility to the code.

For example, consider a data class with two fields: name and remark:

public class Result {
   private String name;
   private String remark;

   public String getName() {
      return name;
   }
   public void setName(String newName) {
      name = newName;
   }
   public String getRemark() {
      return remark;
   }

   public void setRemark(int remarkPoints) {
      if (remarkPoints >= 5) {
         remark = "good";
      }

      if (remarkPoints < 5) {
         remark = "poor";
      }
   }

}

In the example above, we set remarks according to remark points. However, if we need to add another remark ("very good") for students who get 10 points, we don't need to ask the user of the code to change it; instead, we can modify the setter: 

public void setRemark(int remarkPoints) { if (remarkPoints == 10) { remark = "very good"; } if (remarkPoints >= 5 && remarkPoints < 10) { remark = "good"; } if (remarkPoints < 5) { remark = "poor"; } }

Another example is a class Phone with a field weight. If it is not encapsulated, someone could modify it to have a negative weight. It's better to encapsulate the field using a private variable and provide a setter method where you can add logic for no negative and not over 100 grams.

Think of a real-life example of a car, which is a well-defined composite object with numerous subsystems like transmission, music system, air cooler, or heater system, and others based on the car's price. Each system has its protective layer, so the transmission system does not interfere with the music system or air cooler system. However, there is some integration, such as the transmission charging the battery, which helps to play music. Still, no one can directly modify the behavior of another system. This is how encapsulation hides the complexity of a program.

Benefits of Encapsulation:

  1. The fields of a class can be made read-only or write-only.
  2. A class can have total control over what is stored in its fields.
  3. The main benefit of encapsulation is the ability to modify implemented code without breaking the code of others who use it. Users of a class do not know how the class stores its data. A class can change the data type of a field, and users of the class do not need to change any of their code.










#hemant #kurmi #hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant 

Thursday, 27 February 2014

Create,Delete and Compile by ANT build file.(Ant Part-3)

In our last post we have seen 
Now we will see some core task which can be performed by using ant such as create a folder or delete folder and to compile the java source.If till now you have not got 1% idea about ANT don't worry it is not needed also just check the below XML build file.

<?xml version="1.0"?>
<project name="MyfirstAnt" default="main" basedir=".">
  <!-- Sets variables which can later be used. -->
  <!-- The value of a property is accessed via ${} -->
  <property name="create.dir" location="D:/MyAnt/NewFolder" />
  <property name="delete.dir" location="D:/MyAnt/OldFolder" />                  
  <!-- Deletes oldFolder from the path delete.dir-->
  <target name="cleanFolder">
    <delete dir="${delete.dir}" />
  </target>

  <!-- Creates a newfolder on the path create.dir-->
  <target name="makefolder">
    <mkdir dir="${create.dir}" />
  </target>

  <!-- Compiles the java code (including the usage of library for JUnit -->
  <target name="compile" depends="cleanFolder, makefolder">                 <javac srcdir="${src.dir}" destdir="${build.dir}">
    </javac>

  </target>
  <target name="main" depends="compile">
    <description>Main target</description>
  </target>

</project> 

Here we have written three tasks first is to delete a particular folder from file system  the path which you will give in dir attribute it will clean the particular folder means it can be used to clean the class files before building .

Second task is to create a folder so you can create any folder in file system it can be temp .

and last task is to compile the the java source files here we have to give the source path of java files and destination folder where you have to keep the class files you can also set class-path for proper compilation which we will discuss in our coming posts.



#hemant #kurmi 
#hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant#hemant #kurmi #hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi

Hemant kurmi 

You may also like:-

Using JConsole in java And creating memory dump by it

Heap analysis by Memory Analyzer (MAT) - Eclipse java

Main causes of Out-Of-Memory Errors in java

Five main types of Memory leaks in java

How to Reduce Garbage-Collection Pause Time?

4 Mains causes of Long Garbage Collection Pause?


How Application Performance get impacted by Garbage Collection?


Java Performance Tuning options Java heap


Why Memory leak in Java ?


What is a Memory Leak in java?


What is Garbage collector in java and how it works?


What is Garbage Collector Compaction in Java?


What are Java heap Young, Old and Permanent Generations?


What is difference between Web Server and Application Server ?


What is the maximum ram for 32 bits and 64 bits computer?


Some Amazing fact about memory (petabyte,exabyte,zettabyte) And How much data exists on the Web?

Friday, 14 February 2014

Hemant Kurmi - Compression of HttpServletRequest and HttpServletResponse by gzip encoding

Description 
This filter is on HTTP headers in a HttpServletRequest, compress data written to the HttpServletResponse, or decompress data read from the request. When supported by the client browser, this can potentially greatly reduce the number of bytes written across the network from and to the client. As a Filter, this class can also be easily added to any J2EE 1.3+ web application.





Installation

1).Add the pjl-comp-filter-XX.jar file containing CompressingFilter to your web application's WEB-INF/lib directory.

2).Add the following entries to your web.xml deployment descriptor:

 <filter>
  <filter-name>CompressingFilter</filter-name>
  <filter-class>com.planetj.servlet.filter.compression.CompressingFilter</filter-class>
 </filter>

 <filter-mapping>
  <filter-name>CompressingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

The below data is of my application where i tested this compression techniques

The count is based on data fetched from fiddler when running  app  with and without compression Filter.

Data compression ratio=5:1

Header space savings =80%

Encoding used= gzip

Below header data is actual and after installing CompressingFilter.



Before encoding
After using gzip encoding
    Request Count: 12
    Bytes Sent: 8,212
    Bytes Received: 92,623

    ACTUAL PERFORMANCE
    --------------
    Requests started at: 17:58:52:1558
    Responses completed at: 17:58:57:9514
    Aggregate Session time: 00:00:05:1525
    Sequence (clock) time: 00:00:05.7955795

    RESPONSE CODES
    --------------
    HTTP/404: 1
    HTTP/304: 10
    HTTP/200: 1

    RESPONSE BYTES (by Content-Type)
    --------------
    ~headers: 1,384
    text/html: 91,239
    Request Count: 12
    Bytes Sent: 8,206
    Bytes Received: 15,392

    ACTUAL PERFORMANCE
    --------------
    Requests started at: 18:30:13:7882
    Responses completed at: 18:30:14:9522
    Aggregate Session time: 00:00:00:7760
    Sequence (clock) time: 00:00:01.1640000

    RESPONSE CODES
    --------------
    HTTP/404: 1
    HTTP/304: 10
    HTTP/200: 1

    RESPONSE BYTES (by Content-Type)
    --------------
    ~headers: 1,661
    text/html: 13,731






#hemant #kurmi 
#hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant#hemant #kurmi #hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi

Wednesday, 12 February 2014

Example of Garbage collection .

This post is dedicated to explain how Garbage collection works and what can cause memory leaks.
Here we will manually run a small program and will check how memory is allocated to objects and how they it
is collected back when they needed no more.

Lets create a Valueobject which we will access from a class .
below is a Employee Vo which contains name and id of a employees

Lets create a Test class to accesses this Vo .

The above class contains a method m1 and a main method.

When JVM starts it creates to portions to store data
1) heap to keep objects 
2) stack to keep primitive data types and references to heap.Each method will have there own heap

So when we will run the above Test class the memory snap at line number 4 will be

Heap
===================
Empty


Stack
=============
main method
---------------
args:null


so initially heap will be empty and stack will contain the args passed to main method.
Every method has its own stack.
At line number 5 it will store the value of val in stack . it will be in stack because val is of primitive data type.
now memory snap will.

Heap
===================



Stack
=============
main method
---------------
args:null
val:10


On next line i.e. line number 6 it will create a object of Employee and 
will store in heap and will maintain its reference in stack
So it will look like 

Heap
===================
1000X:EmployeeObj name=2000X , id=2
2000X:StringObj "Ravi"


Stack
=============
main method
---------------
args : null
val : 10
e : 1000X

Here 1000X and 2000X are memory addresses and since "Ravi"
is a object of String class it will be stored at different address


On next line number 7 it is calling a method m1 so a new stack will be created in a
stack and will hold the passed parameter i.e. object e

Heap
===================
1000X:EmployeeObj name=2000X , id=2
2000X:StringObj "Ravi"


Stack
=============

main method
---------------
args : null
val : 10
e : 1000X

m1 method
--------------------
e : 1000X----passed as reference 


Now in next line 12 it has changed the value of id from 2 to 5 
so it will be like

Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"


Stack
=============
main method
---------------
args : null
val : 10
e : 1000X

m1 method
--------------------
e : 1000X


The reference of e will be the same 
At next line number 13 its creating a new object.
Remember When we use New key word always a new object is created
So the heap stack position will be like.


Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"
3000X:EmployeeObj name=4000X , id=7
4000X:StringObj "Gaurav"


Stack
=============

main method
---------------
args : null
val : 10
e : 1000X

m1 method
--------------------
e : 3000X


Now at line number 14 its id value will be changed to 9
so memory snap will

Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"
3000X:EmployeeObj name=4000X , id=9
4000X:StringObj "Gaurav"


Stack
=============

main method
---------------
args : null
val : 10
e : 1000X

m1 method
--------------------
e : 3000X


At line 15 method will be finished and its stack will be removed

Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"
3000X:EmployeeObj name=4000X , id=9
4000X:StringObj "Gaurav"


Stack
=============

main method
---------------
args : null
val : 10
e : 1000X

So finaly the value of the id at line number (8) will 5
Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"
3000X:EmployeeObj name=4000X , id=9
4000X:StringObj "Gaurav"

Stack
=============
main method
---------------
args : null
val : 10
e : 1000X


Now let at this point garbage collector runs
So first it will mark all the live object which can be referred from stack.
and will remove all other objects from memory

Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"
3000X:EmployeeObj name=4000X , id=9
4000X:StringObj "Gaurav"

Stack
=============
main method
---------------
args : null
val : 10
e : 1000X


After running GC

Heap
===================
1000X:EmployeeObj name=2000X , id=5
2000X:StringObj "Ravi"
4000X:StringObj "Gaurav" not be collected 

Stack
=============
main method
---------------
args : null
val : 10
e : 1000X


String objects will not be removed since they are sorted in separate memory called String pool.


#hemant #kurmi #hemant #kurmi #hemant #kurmi
#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi#hemant #kurmi

What is the maximum ram for 32 bits and 64 bits computer?


Some Amazing fact about memory (petabyte,exabyte,zettabyte) And How much data exists on the Web?

Hemant Kurmi - 2021 - Some Amazing Facts About Memory: Petabyte, Exabyte, and Zettabyte

Some Amazing Facts About Memory: Petabyte, Exabyte, and Zettabyte As technology advances, our ability to store and process data has grown ...