Skip to content

Instantly share code, notes, and snippets.

@yuki24
Created January 13, 2017 22:51
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yuki24/48f28563e80ad8cc1c6e2ac65ede0722 to your computer and use it in GitHub Desktop.
Save yuki24/48f28563e80ad8cc1c6e2ac65ede0722 to your computer and use it in GitHub Desktop.
JSON with the symbolize_name: true option
require 'json'
require 'open-uri'
require 'benchmark/ips'
require 'memory_profiler'
json = open('https://network.pivotal.io/api/v2/products').read
Benchmark.ips do |x|
x.report('symbolize_names: false') { JSON.parse(json) }
x.report('symbolize_names: true') { JSON.parse(json, symbolize_names: true) }
x.compare!
end
puts "\n\n\n"
puts 'symbolize_names: false (default)'
puts '-----------------------------------'
MemoryProfiler.report do
100.times { JSON.parse(json) }
end.pretty_print
GC.start
puts "\n\n\n"
puts 'symbolize_names: true'
puts '-----------------------------------'
MemoryProfiler.report do
100.times { JSON.parse(json, symbolize_names: true) }
end.pretty_print
@yuki24
Copy link
Author

yuki24 commented Jan 13, 2017

Result:

Warming up --------------------------------------
symbolize_names: false
                       123.000  i/100ms
symbolize_names: true
                       133.000  i/100ms
Calculating -------------------------------------
symbolize_names: false
                          1.280k (± 4.4%) i/s -      6.396k in   5.007055s
symbolize_names: true
                          1.319k (± 4.1%) i/s -      6.650k in   5.050343s

Comparison:
symbolize_names: true:     1319.1 i/s
symbolize_names: false:     1280.1 i/s - same-ish: difference falls within error

symbolize_names: false (default)

Total allocated: 38994500 bytes (286200 objects)
Total retained: 0 bytes (0 objects)

allocated memory by gem

38994500 2.3.3/lib

allocated memory by file

38994500 /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb

allocated memory by location

38990500 /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156
4000 /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:155

allocated memory by class

28570500 String
10235200 Hash
116800 JSON::Ext::Parser
72000 Array

allocated objects by gem

286200  2.3.3/lib

allocated objects by file

286200  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb

allocated objects by location

286100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:155

allocated objects by class

241800  String
 44200  Hash
   100  Array
   100  JSON::Ext::Parser

retained memory by gem

NO DATA

retained memory by file

NO DATA

retained memory by location

NO DATA

retained memory by class

NO DATA

retained objects by gem

NO DATA

retained objects by file

NO DATA

retained objects by location

NO DATA

retained objects by class

NO DATA

Allocated String Report

 58600  "href"
 58600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14800  "_links"
 14800  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14800  "self"
 14800  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "file_groups"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "id"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "logo_url"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "name"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "product_files"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "releases"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

 14600  "slug"
 14600  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   500  "https://dtb5pzswcit1e.cloudfront.net/"
   500  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   400  "https://dtb5pzswcit1e.cloudfront.net/assets/images/product_logos/icon_pcfServicesSDK@2x.png"
   400  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   200  "https://dtb5pzswcit1e.cloudfront.net/assets/images/product_logos/icon_sqlfire@2x.png"
   200  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   200  "products"
   200  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "API Gateway for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Aerospike Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Alpine Chorus for Pivotal Big Data Suite"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Apigee Edge Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "App Distribution for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "AppDynamics Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Azuqua Platform Connector for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Blue Medora Nozzle for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Buildpacks for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Cloudsoft Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Crunchy PostgreSQL for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Data Sync for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "DataStax Enterprise for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Dingo PostgreSQL for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Dynatrace Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "EDB Postgres Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "First Data Payments Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Flo for Spring XD"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "ForgeRock Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "GCP Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "GemFire for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "GitLab Enterprise Plus for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Hazelcast for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "IPSec Add-on for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "ISS Knowtify Search Analytics for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "JFrog Artifactory for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Microsoft Azure Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "MySQL for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "New Relic Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "PCF Dev"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal App Suite"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Big Data Suite"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry Elastic Runtime"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry JMX Bridge (Ops Metrics)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry Log Search"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

Retained String Report

symbolize_names: true

Total allocated: 35226180 bytes (191032 objects)
Total retained: 320 bytes (8 objects)

allocated memory by gem

35202980 2.3.3/lib
23200 other

allocated memory by file

35202980 /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb
23200 json_with_synbolize_names.rb

allocated memory by location

35202980 /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156
23200 json_with_synbolize_names.rb:29

allocated memory by class

24759460 String
10277600 Hash
116800 JSON::Ext::Parser
72000 Array
320 Symbol

allocated objects by gem

190932  2.3.3/lib
   100  other

allocated objects by file

190932  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb
   100  json_with_synbolize_names.rb

allocated objects by location

190932  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156
   100  json_with_synbolize_names.rb:29

allocated objects by class

146524  String
 44300  Hash
   100  Array
   100  JSON::Ext::Parser
     8  Symbol

retained memory by gem

   320  2.3.3/lib

retained memory by file

   320  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb

retained memory by location

   320  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

retained memory by class

   320  String

retained objects by gem

     8  2.3.3/lib

retained objects by file

     8  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb

retained objects by location

     8  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

retained objects by class

     8  String

Allocated String Report

 29303  "href"
 29303  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7403  "_links"
  7403  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7400  "self"
  7400  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7303  "file_groups"
  7303  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7303  "logo_url"
  7303  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7303  "product_files"
  7303  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7303  "releases"
  7303  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7303  "slug"
  7303  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7300  "id"
  7300  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

  7300  "name"
  7300  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   500  "https://dtb5pzswcit1e.cloudfront.net/"
   500  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   400  "https://dtb5pzswcit1e.cloudfront.net/assets/images/product_logos/icon_pcfServicesSDK@2x.png"
   400  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   200  "https://dtb5pzswcit1e.cloudfront.net/assets/images/product_logos/icon_sqlfire@2x.png"
   200  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   103  "products"
   103  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "API Gateway for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Aerospike Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Alpine Chorus for Pivotal Big Data Suite"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Apigee Edge Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "App Distribution for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "AppDynamics Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Azuqua Platform Connector for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Blue Medora Nozzle for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Buildpacks for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Cloudsoft Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Crunchy PostgreSQL for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Data Sync for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "DataStax Enterprise for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Dingo PostgreSQL for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Dynatrace Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "EDB Postgres Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "First Data Payments Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Flo for Spring XD"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "ForgeRock Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "GCP Service Broker for PCF (BETA)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "GemFire for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "GitLab Enterprise Plus for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Hazelcast for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "IPSec Add-on for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "ISS Knowtify Search Analytics for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "JFrog Artifactory for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Microsoft Azure Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "MySQL for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "New Relic Service Broker for PCF"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "PCF Dev"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal App Suite"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Big Data Suite"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry Elastic Runtime"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry JMX Bridge (Ops Metrics)"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

   100  "Pivotal Cloud Foundry Log Search"
   100  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

Retained String Report

     1  "_links"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "file_groups"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "href"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "logo_url"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "product_files"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "products"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "releases"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

     1  "slug"
     1  /Users/pivotal/.rbenv/versions/2.3.3/lib/ruby/2.3.0/json/common.rb:156

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment